請參閱 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