[問題] 關於 wildcard 的疑問

作者: johnny94 (32767)   2018-06-02 17:52:56
最近在學習 generic 的知識,看到 wildcard 有一些疑問,
假設我們有一個這樣的 Class
class Node<T> {
T data;
public Node(T data) {
this.data = data
}
public voide setData(T data) {
this.data = data;
}
}
在 Java 中包含 type variable 的 class 是沒有關係的,即便兩個 type variables
有繼承關係。
例如:
List<Number> numList = new ArrayList<>();
List<Integer> intList = new ArrayList<>();
numList = intList // compile error
但是 Java 為了增加一些使用上的彈性,增加了一些語法使得開發者們可以在一些限制下
做到上面的操作,就是使用 wildcard type:
List<? extends Number> numList = new ArrayList<>();
List<Integer> intList = new ArrayList<>();
numList = intList // ok!
不過這樣的用法是一些有限制的,像是我們沒有辦法增加元素到 numList 裡面
numList.add(1) // compile error
這也是使用 wildcard type 時需要注意到的 PECS 原則
(剩下的就不再贅述,這邊只是讓版友知道我對這個主題目前的理解)
作者: ssccg (23)   2018-06-02 18:53:00
new Node<>(3)會被算成 new Node<Integer>(3)<>是自動找一個可行的類別,不是照抄變數宣告的類別...
作者: johnny94 (32767)   2018-06-02 19:01:00
....原來是這樣阿,這樣子我馬上懂了...感謝 ssccg!我真的是一直以為他是照抄變數宣告的類別XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com