2013-11-04 99 views

回答

9

在第一種情況下,給予方法列表必須List<Serializable>。在第二種情況下,它可以是,或者List<AnythingThatDerivesFromSerializable>。 (在Serializable特定情況下,它不可能有太大差別。)

讓我們做,一般情況下:

class Base { 
} 

class Sub extends Base { 
} 

然後

public void myMethod(List<Base> list) { 
} 

如果我有一個List<Sub>,我不能不要給myMethod。但如果你這樣做:

public void myMethod(List<? extends Base> list) { 
} 

我可以。

5

List<Serializable> list表示您只能發送List<Serializable>參數或實現List<Serializable>的類,如ArrayList<Serializable>

List<? extends Serializable> list表示只要Whatever實現了Serializable接口,例如,您可以發送List<Whatever>List<String>

0

List<? extends Serializable>將允許來電者通過任何亞型Serializable列表。這通常比需要精確類型匹配更靈活。

但是,請注意,使用擴展通配符List<E>將限制您可以執行的操作。具體而言,您將無法調用具有包含有界泛型參數的參數類型的任何實例方法。例如,您不能撥打list.add(E),因爲它有一個參數類型E(以通配符爲界),但您可以撥打get(int)

拇指用於與收藏的規則擴大通配符的是,你可以拉值從集合中,但你不能把價值。如果你只是從列表中讀取數據,那麼你應該使用通配符。

相關問題