Lan*_*lot 39 java generics list bounded-wildcard
我有关于泛型的Java问题.我宣布了一个通用名单:
List<? extends MyType> listOfMyType;
Run Code Online (Sandbox Code Playgroud)
然后在某些方法中我尝试实例化并将项添加到该列表:
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
Run Code Online (Sandbox Code Playgroud)
哪里myTypeInstance
只是一个类型的对象MyType
; 它不会编译.它说:
该方法在类型List <capture#3-of中添加(捕获#3-of?extends MyType)?extends MyType>不适用于参数(MyType)
任何的想法?
Sur*_*rya 32
你不能用扩展"put"做.看看泛型 - 获取和放置规则.
Tom*_*ine 26
考虑:
class MySubType extends MyType {
}
List<MySubType> subtypeList = new ArrayList<MySubType>();
List<? extends MyType> list = subtypeList;
list.add(new MyType());
MySubType sub = subtypeList.get(0);
Run Code Online (Sandbox Code Playgroud)
sub
现在包含一个MyType
非常错误的.
您无需在情况下使用通配符捕获语法,只需声明
List<MyType> listOfMytype;
Run Code Online (Sandbox Code Playgroud)
应该足够了。如果您想确切地知道为什么,那么Java Generics教程比您想了解的更多有关Java Generics的深奥疯狂。第20页解决您的具体情况。
至于为什么不能使用通配符捕获进行添加的原因,是因为编译器无法精确确定列表在每种情况下都属于MyType的哪个子类,因此编译器会发出错误消息。
归档时间: |
|
查看次数: |
53092 次 |
最近记录: |