用数据库中的值填充一个枚举
问题内容:
我有一个表映射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的回答。)