自己参照するenumはまともに動かない
正確には、「その行時点で宣言されていないenumメンバを指定するとnull扱いになってしまう」。
下記コードでは、
- StateTransition.S0.next = null
- StateTransition.S1.next = null
- StateTransition.S2.next = StateTransition.S0
となっていて、まぁまともに動いてくれるとは言いがたい状況です。
思想としてはアリかなと思わないでもないですが、それならコンパイル時点でエラー扱いにしてくれよとも思ったり。この辺りが静的チェックの限界なのかなぁ。
public enum StateTransition { S0(StateTransition.S1), //StateTransition.S1 is null S1(StateTransition.S2), //StateTransition.S2 is null S2(StateTransition.S0); //StateTransition.S0 is not null final StateTransition next; private StateTransition (StateTransition next){ this.next = next; } public static void main(String[] args) { StateTransition s = StateTransition.S0; System.out.println(s); //prints "S0" System.out.println(s = s.next); //prints "null" System.out.println(s = s.next); //throws NullPointerException } }