不知道你想能走多遠,但這裏是一些非常醜陋的代碼是你的枚舉的創傷更小:
的所有代碼不能編譯
public class Main {
public enum IpHdrProtocol {
TCP(6), SCTP(132), MPLS(137);
int Value;
IpHdrProtocol(int value) {
Value = value;
}
}
public static void main(String[] argv) throws NoSuchMethodException, IllegalArgumentException, InvocationTargetException,
IllegalAccessException, SecurityException, NoSuchFieldException {
System.err.println(getProtocol(6));
System.err.println(getProtocol(132));
System.err.println(getProtocol(137));
}
private static IpHdrProtocol getProtocol(int i) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException,
SecurityException, NoSuchFieldException {
Field f = IpHdrProtocol.class.getDeclaredField("Value");
Method m = IpHdrProtocol.class.getMethod("values", null);
Object[] invoke = (Object[]) m.invoke(null, null);
for (Object o : invoke) {
if (!f.isAccessible()) {
f.setAccessible(true);
}
if (((Integer) f.get(o)).intValue() == i) {
return (IpHdrProtocol) o;
}
}
return null;
}
}
這就是我想要的並基於此實現了一個解決方案。實際上,我首先創建了一個反序列化程序對象,它查詢了您所顯示的枚舉類,但創建了一個整數值和相應的枚舉實例值的映射。當我使用它來反序列化時,我只需在地圖上查找。 Simples。所有被問及特定枚舉類的問題都是它實現了一個支持getIntValue()的簡單接口,這非常乾淨。 – 2012-03-07 13:55:11