方便地在enum和int / String之间映射
当使用只能接受有限数量值的变量/参数时,我尝试始终使用Java的enum,如 public enum BonusType { MONTHLY, YEARLY, ONE_OFF } 只要我留在代码中,就可以正常工作。但是,我经常需要与出于相同目的使用纯int(或String)值的其他代码进行交互,或者我需要从数据库中读取/写入数据,在数据库中数据以数字或字符串的形式存储。 在那种情况下,我想有一个方便的方法将每个枚举值与一个整数相关联,这样我就可以同时转换两种方式(换句话说,我需要一个“可逆枚举”)。 从枚举到整数很容易: public enum BonusType { public final int id; BonusType(int id) { this.id = id; } MONTHLY(1), YEARLY(2), ONE_OFF(3); } 然后,我可以访问int值BonusType x = MONTHLY; int id = x.id;。 但是,我看不到相反的好方法,即从int到enum。理想情况下, BonusType bt = BonusType.getById(2); 我唯一能想到的解决方案是: 将查找方法放入枚举,该方法BonusType.values()用于填充映射“ int->枚举”,然后对其进行缓存并将其用于查找。可以,但是我必须将此方法相同地复制到我使用的每个枚举中:-(。 将查找方法放入静态实用程序类。然后,我只需要一个“查找”方法,但我不得不摆弄反射以使其适用于任意枚举。 对于这样一个简单的(?)问题,这两种方法都显得很尴尬。 还有其他想法/见解吗?