我有以下的java代碼:Box<? extends Integer> i = new Box<Integer>(); i.set(10);
。爲什麼不編譯?java中的通用通配符。編譯錯誤。
1
A
回答
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
相關問題
- 1. 通配符編譯時錯誤
- 2. Java:通配符類型不匹配導致編譯錯誤
- 3. 上界引起編譯錯誤通配符的Java
- 4. Java泛型:通配符捕獲編譯錯誤
- 5. Java泛型,通配符,集合:編譯錯誤
- 6. 通用編譯錯誤
- 7. 通用類中的編譯錯誤
- 8. Java的通用上界通配符錯誤
- 9. JAVA通配符捕獲錯誤,使用通用堆棧數組
- 10. 泛型上界通配符給出編譯錯誤
- 11. 泛型:與通配符類型編譯錯誤
- 12. java通用通配符
- 13. 通用通配符調用將不會編譯
- 14. 通用通配符在Java中
- 15. Java通用方法調用導致編譯錯誤
- 16. 添加字符串通過使用通用的 '延伸' 使編譯器錯誤
- 17. 爪哇通配符錯誤
- 18. Java嵌套的通配符泛型不會編譯
- 19. 帶通配符的Java非泛型不編譯
- 20. Java地圖編譯器錯誤與通用
- 21. Java編譯錯誤無法配置JAVA_HOME
- 22. 編譯錯誤Java
- 23. Java編譯錯誤';' '}'
- 24. 編譯錯誤Java
- 25. Java編譯錯誤
- 26. 在Java中編譯錯誤
- 27. 編譯Java編譯期間的錯誤
- 28. Java通用錯誤
- 29. Java泛型通配符:爲什麼不能編譯?
- 30. Java泛型和通配符:如何編譯此代碼?
爲什麼不'箱我=新盒子 ();'? –