用数据库中的值填充一个枚举


问题内容

我有一个表映射String-> Integer。

我想用数据库中的值填充该枚举,而不是静态地创建一个枚举。这可能吗 ?

因此,与其静态地解决这个问题,不如:

public enum Size { SMALL(0), MEDIUM(1), LARGE(2), SUPERSIZE(3) };

我想动态创建这个枚举,因为数字{0,1,2,3}基本上是随机的(因为它们是由数据库的AUTOINCREMENT列自动生成的)。


问题答案:

否。枚举始终固定在编译时。您执行此操作的唯一方法是动态生成相关的字节码。

话虽如此,您可能应该算出您真正感兴趣的枚举的哪些方面。大概您不想对switch它们使用语句,因为那将意味着静态代码,并且您不静态知道值。
..同样,代码中的任何其他引用。

如果您真的只想要一个从String到的映射Integer,则可以只使用Map<String, Integer>在执行时填充的a
,这样就完成了。如果您需要这些EnumSet功能,则以相同的效率重现这些功能会有些棘手,但经过一些努力可能是可行的。

因此,在进一步考虑实现之前,建议您弄清实际需求。

(编辑:我一直假设此枚举是完全动态的,即您不知道名称,甚至不知道有多少值。如果名称集是固定的, 则只 需要从数据库中获取ID ,那是完全不同的问题-
请参阅Andreas的回答。)