我有一张表映射String-> Integer的表。
我不想静态创建枚举,而是要使用数据库中的值填充枚举。这可能吗 ?
所以,而不是静静地分析:
public enum Size { SMALL(0),MEDIUM(1),LARGE(2),SUPERSIZE(3) };
我想自动创建这个枚举,因为数字{0,1,2,3}基本上是随机的(因为它们是由数据库的AUTOINCREMENT列自动生成的)。
解决方法
枚举在编译时总是固定的。您唯一可以做到这一点就是生成相关的字节码。
话虽如此,你应该可以弄清楚你真正感兴趣的枚举的哪些方面,大概你不想使用switch语句,这意味着静态代码,你不会静态地知道值…同样代码中的任何其他参考。
如果你真的只想要一个从String到Integer的地图,你可以使用Map< String,Integer>你在执行时填充,你完成了。如果你想要EnumSet的功能,他们会以相同的效率来复制一些棘手的东西,但是通过一些努力可能是可行的。
所以,在进一步考虑实施之前,我建议你制定出实际要求。
(编辑:我一直假设这个枚举是完全动态的,即你不知道名字,甚至不知道有多少值。如果一组名称是固定的,你只需要从数据库中获取ID这是一个非常不同的事情 – 见Andreas’ answer.)