/** * 泛型類聲明的泛型參數占主導地位,如泛型類聲明的參數爲<T>,則泛型接口的泛型參數也應爲<T>; * 當泛型類聲明的參數爲<T>時,泛型接口的參數<T>能夠不寫; * @param <T> */ public class LinkedList<T> implements Iterable { @Override public Iterator iterator() { return null; } @Override public void forEach(Consumer action) { } @Override public Spliterator spliterator() { return null; } }
public class GenericMethods{ public <T> void f(T x) { System.out.println(x.getClass().getName()); } }
在泛型代碼內部,沒法得到任何與關泛型參數類型的信息
List
泛型類型參數將擦除到它的第一個邊界node
之因此使用擦除來實現泛型,是爲了遷移兼容性數組
class ClassAsFactory<T>{ T x; public ClassAsFactory(Class<T> kind){ try { x = kind.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } } }
public class ZwbHeap<T extends Comparable<? super T>> { private T[] nodes; private int size; private int capacity = 16; public ZwbHeap() { // 這樣轉換會失敗 //nodes = (T[])new Object[capacity+1]; // 必須這樣寫 nodes = (T[])new Comparable[capacity+1]; } }