2015-11-25 50 views
1
class MyTest<K,V extends Number & Comparable> implements Comparable<MyTest>{ 

    private K key; 
    private V value; 

} 

這是什麼意思K, V extends Number & Comparable?在上面的聲明MyTest正在實現一個可比較的接口,但我無法弄清楚K,V和爲什麼有數字&可比。 k,v不是一個接口。有人可以在這方面給我啓發。通用:擴展數量和可比較基本瞭解

+0

它的一個鍵,值對。 – Salah

+0

[此處命名約定參考](https://docs.oracle.com/javase/tutorial/java/generics/types.html);這對你將來會有所幫助。 – Makoto

回答

5

該類接受兩個通用參數,其中第一個命名爲K(可能用作「key」),第二個命名爲V(可能被用作「value 「)。

V extends Number & Comparable部分表示該類僅接受那些值爲Number的抽象類和實現Comparable接口的V值。這些類別的例子是標準JDK Integer,Float,Long,DoubleBigInteger。如果您想使用自己的課程V,則應該同時延伸Number並實施Comparable。對K沒有限制:您可以使用K的任何等級。例如,這種類型是有效的:

MyTest<String, Integer> myTest; // K = String, V = Integer 

但這一次將導致編譯錯誤:

MyTest<Integer, String> myTest; // K = Integer, V = String, does not implement Number 
+1

順便說一句,'V extends ...'使用原始類型,它可能不應該。它應該是'V extends Number&Comparable ' – yshavit

+1

@yshavit,同意了。它也應該是'實現可比較的>' –

0

我們可以通過擴展或實現其亞型泛型類或接口。一個類或接口的類型參數與另一個類的類型參數之間的關係由extends和implements子句確定。

例如,ArrayList實現了擴展Collection的List,所以ArrayList是List的子類型,List是Collection的子類型。 這裏K表示鍵,V表示值。然後從您的代碼中Java編譯器用類似數字替換類型參數K與數字和V,如下代碼:

private Number key; 
private Comparable value;