至少对于J2SE 1.5转发,您可以为枚举赋予额外的属性。这意味着您可以用类似如下的内容替换整个if-else字符串
var2 = var1.getNextInSequence();
现在,在这种情况下,您似乎希望该属性成为对另一个枚举的引用,这会增加一些折痕,例如,在初始化它们时无法转发参考枚举,但是可能有一个可行的解决方案这条路。
当属性不是相同枚举的其他实例时,这种方法将起作用:
public enum Animal { FOX(4), CHICKEN(2), WORM(0); private int countLegs; Animal(int n) { countLegs = n; } public int getLegCount() { return countLegs; } // .. more getters setters etc}但是,当枚举是自引用的时,您必须注意实例的声明顺序。即,这将有一些问题:
public enum Animal { FOX(4, CHICKEN), // 'CHICKEN' doesn't exist yet WORM(0, null), CHICKEN(2, WORM); // this actually will compile private int countLegs; private Animal eatsWhat; Animal(int n, Animal dinner) { countLegs = n; eatsWhat = dinner; } public int getLegCount() { return countLegs; } // .. getters, setters, etc}因此,如果需要枚举之间的循环引用集,则必须进行其他操作,但是如果没有,则 可以 使用此技术,尽管您可能必须对枚举实例进行排序才能使其正常工作。



