2013-02-28 127 views
0
public abstract class Enum<E extends Enum<E>> 
      implements Comparable<E>, Serializable { 
    // All code goes here 

    } 

在上面的代碼中,爲什麼有遞歸類型綁定到Enum的類型參數,以及爲什麼包含Comparable<E>的部分缺失。換句話說,它爲什麼是Comparable<E>而不是Comparable<E extends Comparable<E>>爲什麼Enum聲明中的類型參數包含遞歸類型邊界?

+1

「換句話說,爲什麼...不是可比<延伸可比>」,因爲這不是有效的Java語法 – newacct 2013-02-28 18:44:43

+0

@newacct如果'枚舉>'是有效的Java語法,爲什麼不'可比較>'?.我已經編輯了這個問題btw?你是說因爲我已經刪除了額外的'<'''附近的'E'而無效嗎? – Geek 2013-02-28 18:52:27

+1

編號類型參數的邊界只能在聲明類型參數的地方指定。對於泛型類,類型參數在類聲明中的類名稱後面聲明,例如,在類'Enum >'中。對於泛型方法,類型參數在返回類型之前聲明。其他任何地方,包括在你的例子中指定超類或接口,你只是使用類型參數;你不能指定邊界。 – newacct 2013-02-28 18:58:13

回答

4

Enum<E extends Enum<E>>定義了E並限制它的類型。

當你到達Comparable<E>E現在被定義,所以你不需要進一步限定它。

Comparable<<E> extends Comparable<E>>只是愚蠢的。如果你的意思是像Comparable<E extends Enum<E>>那麼你不需要它,因爲E已被定義和過濾。此時,您現在將通知用戶更多關於此類別的對象的功能,即它們實現Comparable<E>接口。

Enum類型具有遞歸類型的邊界,因爲它們是一個遞歸式,即一個enum的本身就是一個Enum(注意的情況下的差)。

0

可能不希望將Comparable的泛型類型參數綁定到特定類型,而Enum必須綁定到延伸Enum的類型。

0

也是Comparable<E extends Comparable<E>>Comparable<E>Comparable<E extends Enum<E>>相同因爲E extends Enum<E>Enum<E>Comparable<E>相同,因爲繼承。因此Comparable<E>相同Comparable<E extends Comparable<E>>

相關問題