2015-05-13 38 views

回答

2

因爲Box<? extends Integer>可以是Box<SomeSubtypeOfIntegerNotIncluding10>。您需要改爲Box<Integer>

+0

感謝您的回覆。短但通知。所以用這種方式思考我不能把任何東西放到A ? – hungry91

+0

你可以添加或設置'null',你可以得到_out_對象,但是你不能把任何東西放在'null'中。 –

3

下面的語句

Box<? extends Integer> box = new Box<Integer>(); 

意味着框協變。因此,你可以,如果你把它更改爲以下

Box<? super Integer> box = new Box<Integer>(); 
box.set(10); 

會工作,因爲它是逆變現在拿東西出來,但你不能把東西英寸

,你可以把東西在,但你不能把它們拿出來。

假設您有以下情況。

class Box<T>{ 
    T t; 
    void set(T t){ 
     this.t = t; 
    } 
    T get(){ 
     return t; 
    } 
} 
Box<? extends Integer> box1 = new Box<Integer>(); 
box1.set(10); // doesn't work 
Integer i = box1.get(); // works 

在另一方面

Box<? super Integer> box2 = new Box<Integer>(); 
box2.set(10); // works 
Integer i = box2.get(); // doesn't work 

所以,你想同時擁有獲得/設置,你可以簡單地做到這一點

Box<Integer> box = new Box<Integer>(); 
box2.set(10); // works 
Integer i = box2.get(); // works