1. 类型安全性
java.util.*<span style="color: #0000ff;">public <span style="color: #0000ff;">enum<span style="color: #000000;"> Phase {
SOLID,LIQUID,GAS;
<span style="color: #0000ff;">public <span style="color: #0000ff;">enum<span style="color: #000000;"> Transition {
MELT(SOLID,LIQUID),FREEZE(LIQUID,SOLID),BOIL(LIQUID,GAS),CONDENSE(
GAS,SUBLIME(SOLID,DEPOSIT(GAS,SOLID);
<span style="color: #0000ff;">private <span style="color: #0000ff;">final<span style="color: #000000;"> Phase src;
<span style="color: #0000ff;">private <span style="color: #0000ff;">final<span style="color: #000000;"> Phase dst;
Transition(Phase src,Phase dst) {
</span><span style="color: #0000ff;">this</span>.src =<span style="color: #000000;"> src;
</span><span style="color: #0000ff;">this</span>.dst =<span style="color: #000000;"> dst;
}
</span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">final</span> Map<Phase,Map<Phase,Transition>> m = <span style="color: #0000ff;">new</span> EnumMap<Phase,Transition>><span style="color: #000000;">(
Phase.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">static</span><span style="color: #000000;"> {
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (Phase p : Phase.values())
m.put(p,</span><span style="color: #0000ff;">new</span> EnumMap<Phase,Transition>(Phase.<span style="color: #0000ff;">class</span><span style="color: #000000;">));
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (Transition trans : Transition.values())
m.get(trans.src).put(trans.dst,trans);
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> Transition from(Phase src,Phase dst) {
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> m.get(src).get(dst);
}
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> main(String[] args) {
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (Phase src : Phase.values())
</span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (Phase dst : Phase.values())
</span><span style="color: #0000ff;">if</span> (src !=<span style="color: #000000;"> dst)
System.out.printf(</span>"%s to %s : %s %n"<span style="color: #000000;">,src,dst,Transition.from(src,dst));
}
}