По крайней мере, с 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
}
Но когда enum является самоссылочным, вы должны быть осторожны с порядком объявления ваших экземпляров. Т.е. у этого будут некоторые проблемы:
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
}
Так что, если вам нужен круговой набор ссылок между перечислениями, вам придется придумать что-то еще, но если нет, вы могли бы использовать эту технику, хотя вам, возможно, придется заказать ваши экземпляры перечислений просто так, чтобы заставить его работать.