[問題] 關於 wildcard 的疑問
最近在學習 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 原則
(剩下的就不再贅述,這邊只是讓版友知道我對這個主題目前的理解)
--------------------------------------------------------------------------
回到最開始的 Node 類別,當我想要使用 wildcard type 時
我這樣寫:
Node<? extends Number> node = new Node<>(3); // ok (why?)
node.setData(1) // compile error
第二行出錯我可以理解,但是我一直想不透為啥第一行是可以成功的
想了很久感覺自己可能陷入思考的誤區,還請版友解惑一下了。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 153.150.177.211
※ 文章網址: https://www.ptt.cc/bbs/java/M.1527933180.A.179.html
※ 編輯: johnny94 (153.150.177.211), 06/02/2018 17:54:58
→
06/02 18:53,
6年前
, 1F
06/02 18:53, 1F
→
06/02 18:55,
6年前
, 2F
06/02 18:55, 2F
→
06/02 19:01,
6年前
, 3F
06/02 19:01, 3F
→
06/02 19:03,
6年前
, 4F
06/02 19:03, 4F
java 近期熱門文章
PTT數位生活區 即時熱門文章