泛型

泛型的好處

  1. 類型安全。 泛型的主要目標是提升 Java 程序的類型安全
  2. 消除強制類型轉換 這使得代碼更加可讀,而且減小了出錯機會

泛型不是協變的

List<Object>不是List<String>的父類型
數組是協變的
//若是 A 擴展 B,那麼 A 的數組也是 B 的數組,而且徹底能夠在須要B[]的地方使用A[]: 
Integer[] intArray = new Integer[10]; 
Number[] numberArray = intArray; 

//對於泛型來講,下面的代碼是無效的
List<Integer> intList = new ArrayList<Integer>(); 
List<Number> numberList = intList; // invalid

泛型中的類型通配符

List<?>是任何泛型List的父類型 加入你有如下代碼:數組

List<Integer> list = new List<Integer>();
printList(list);//×:編譯error

void printList(List<Object> l) { 
    for (Object o : l) {
        System.out.println(o); 
    }
}

編譯失敗,由於List<Integer>不是一個List<Object>(非協變的) 解決方案就是使用通配符安全

List<Integer> list = new List<Integer>();
printList(list);//×:編譯error

void printList(List<?> l) { 
    for (Object o : l) {
        System.out.println(o); 
    }
}

泛型方法

  • 泛型類在多個方法簽名間實施類型約束 在List<V>中,類型參數V出如今get()、add()、contains()等方法的簽名中。即:方法的返回值確定是V類型的。
public static < K1 extends Serializable, V1 extends Encodable < K1 >> Decoder < K1, V1 > create( V1[] values ) {
    return new Decoder < K1, V1 >( values );
}
  • 爲何您選擇使用泛型方法
*當泛型方法是靜態的時,這種狀況下不能使用類類型參數
*

泛型類

public class Matrix<V extends Number> { ... }

編譯器容許您建立Matrix<Integer>或Matrix<Float>類型的變量, 可是若是您試圖定義 Matrix<String>類型的變量,則會出現錯誤。code

相關文章
相關標籤/搜索