2011-12-16 89 views
24

完整的上下文之中:Java- <T extends Comparable <T>>的含義?

public class RClass<T extends Comparable<T>> 

我會正確地說,在標題的聲明意味着插入方法的參數必須是一個實現相當或由其派生的一個類的對象班?

謝謝。

+8

請注意``T擴展Comparable >`(我認爲你可以在那裏做),因爲你可能希望`T`比它的`Comparable`的實現更精確。 – 2011-12-16 19:03:52

+1

@ TomHawtin-tackline你能舉一個爲什麼這是必要的例子嗎?說我有我的列表數據結構,只適用於可比類型。我要指定的方式是public class MyList >。我認爲這會說明並強制我的數據結構只適用於可比較的類型,您的措辭將如何改變? – committedandroider 2015-02-17 01:59:32

回答

27

這意味着類型參數必須支持通過Comparable接口與其自己類型的其他實例進行比較。

Oracle教程Object Ordering提供了此類的示例。注意類似的模式T extends Comparable<T>在下面的摘錄:

public class Name implements Comparable<Name> { 
    ... 
    public int compareTo(Name n) { ... } 
} 
+4

爲什麼不只是Name實現Comparable?爲什麼需要再次指定類名? – committedandroider 2015-02-17 01:57:37

2

是的,請記住,從Comparable派生類的對象是Comparable對象。繼承關係是is-a

2

這意味着你只能用它毫不誇張地伸出Comparable<T>一種創造的RClass一個實例。因此,

RClass<Integer> a; 

是可接受的,因爲Integer延伸Comparable<Integer>,而

RClass<Object> b; 

不大,因爲Object不延伸可比在所有的類。

3

某處在這個類,程序員需要寫類似

if(t.compareTo(othert) < 0) { 
    ... 
} 

對於工作,類型T必須有一個的compareTo-方法,把它比作類型T的另一個目的是擴展可比保證這種方法的存在等等。

6

Java-的含義<T extends Comparable<T>>

一)Comparable <T> 是一個通用接口(請記住這是一個「界面」即不是一個「階級」)

B)extends指繼承從一個類或接口。

從上面所述點#A,它是一個接口..(記住它是從一個「接口」,即一個繼承不從一個「類」)

C)從上述的所述兩個點# a &#b,

這裏「一個接口」擴展了「另一個接口」。

應該爲此類定義一個接口..這裏 只是一個例子是

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 

d)現在你的類即public class RClass {} SHOULD

1#無論是 「落實」 這個 「通用接口」 Comparable<T> .. !!!

例如:public class RClass<T> implements Comparable<T>

2#,或創建一個接口,並延伸到這個 「通用接口」 Comparable<T> 例如:

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> { 
    ..... 
    ..... 
} 

這裏, 要特別注意的方式,類型參數T由RClass聲明並且 然後傳遞給MinMax。由於MinMax需要實現Comparable, 的類型,因此實現類(本例中爲RClass)必須指定相同的綁定。此外, 一旦建立此綁定,就不需要在implements子句中再次指定它。

1

簡而言之,泛型類型T必須與compareTo可比。否則你不能做T.compareTo。 在項目28有效的Java,它表明:"always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

0

==> guhanvj,<T extends Comparable<T>>意味着<T>是具有上限Comparable<T>對象。因此<T>可以具有Byte,Character,Double,Float,Long,Short,String和Integer類的所有類型,這些類都實現了自然排序的Comparable<T>接口。

相關問題