现在我们回过头来看看Enum
如果你明白了上述Foo及其子类所使用的规则,那么再回过头来看为什么java.lang.Enum 被定义为Enum
E被用作getDeclaringClass()的返回值
E被用作compareTo()的参数
这意味着你可以在完成下面的代码并且得到如下的便利a)不用强制类型转换b) 使用Enum的子类来作为Enum方法的参数
Java代码
Rank r = Rank.ACE;
Suit s = Suit.HEART;
r.compareTo(s);; // 语法错误,参数必须是Rank类型
Rank z = Enum.valueOf(Rank.class, "TWO");;//不需要经过类型转换