请参阅 Java Enum definition 和 Why in java enum is declared as Enum<E extends Enum<E>> 一般性讨论。在这里,我想了解究竟是什么将被打破(不是类型安全的了,或者需要额外的管型等),如果枚举类是测试我的想法定义为什么是Java中不同,如果枚举声明没有递归部分
public class Enum<E extends Enum>
我使用这个代码:
interface MyComparable<T> {
int myCompare(T o);
}
class MyEnum<E extends MyEnum> implements MyComparable<E> {
public int myCompare(E o) { return -1; }
}
class FirstEnum extends MyEnum<FirstEnum> {}
class SecondEnum extends MyEnum<SecondEnum> {}
有了它,我无法在这个确切的案例中找到任何好处。
PS。那我不能做
class ThirdEnum extends MyEnum<SecondEnum> {}
时MyEnum与递归定义的事实是
一)不相关的,因为真正的枚举你不能这样做,只是因为你不能延长枚举你自己
b)不正确 - 请在编译器中试试看,它实际上能够编译没有任何错误
PPS。我越来越倾向于相信,这里的正确答案是“如果你删除递归部分,什么都不会改变” - 但我无法相信这一点。
只是一个小纸条,'o.util2(this)'不会被编译,因为这被认为是MyEnum而不是E.你可以添加第二个参数'E o1'并调用'o.util2(o1)'尽管相同效果:它会用'E extends MyEnum '编译,但不能用'E extends MyEnum >' –
2010-06-18 08:54:21
'谢谢,我刚纠正了那个错误。 – 2010-06-18 09:00:26
谢谢!如果删除递归,那么该代码确实被标记为不安全!你知道jdk中该功能的真实用法吗? – atamur 2010-06-18 10:30:32