java 9.2 自定義泛型及容器中的使用

自定義泛型

我們可以在類的聲明處增加泛型列表,如:<T,E,V>。

此處,字元可以是任何標識符,一般採用這3個字母。

【示例9-1】泛型類的聲明

class MyCollection<E> {// E:表示泛型;

Object[] objs = new Object[5];

public E get(int index) {// E:表示泛型;

return (E) objs[index];

}

public void set(E e, int index) {// E:表示泛型;

objs[index] = e;

}

}

泛型E像一個佔位符一樣表示「未知的某個數據類型」,我們在真正調用的時候傳入這個「數據類型」。

Advertisements

【示例9-2】泛型類的應用

public class TestGenerics {

public static void main(String[] args) {

// 這裡的」String」就是實際傳入的數據類型;

MyCollection<String> mc = new MyCollection<String>();

mc.set("aaa", 0);

mc.set("bbb", 1);

String str = mc.get(1); //加了泛型,直接返回String類型,不用強制轉換;

System.out.println(str);

}

}

容器中使用泛型

容器相關類都定義了泛型,我們在開發和工作中,在使用容器類時都要使用泛型。這樣,在容器的存儲數據、讀取數據時都避免了大量的類型判斷,非常便捷。

Advertisements

【示例9-3】泛型類的在集合中的使用

public class Test {

public static void main(String[] args) {

// 以下代碼中List、Set、Map、Iterator都是與容器相關的介面;

List<String> list = new ArrayList<String>();

Set<Man> mans = new HashSet<Man>();

Map<Integer, Man> maps = new HashMap<Integer, Man>();

Iterator<Man> iterator = mans.iterator();

}

}

通過閱讀源碼,我們發現Collection、List、Set、Map、Iterator介面都定義了泛型,如下圖所示:

圖9-2容器的泛型定義

因此,我們在使用這些介面及其實現類時,都要使用泛型。

菜鳥雷區

我們只是強烈建議使用泛型。事實上,不使用編譯器也不會報錯!

你有一份福利待領取「基礎+架構+大數據+人工智慧」

❤如果需要小編每天的發文資料,請私信小編即可!

❤提問/互動請留言,可直接在最底右下方"寫留言即可"

❤如果覺得寫得不錯請點擊「訂閱」,每天更新內容!

Advertisements

你可能會喜歡