列表<;列表<&燃气轮机&燃气轮机;和列表<;列表>;java中存在不兼容的类型
我没有以任何方式编译此代码:列表<;列表<&燃气轮机&燃气轮机;和列表<;列表>;java中存在不兼容的类型,java,generics,casting,raw-types,unbounded-wildcard,Java,Generics,Casting,Raw Types,Unbounded Wildcard,我没有以任何方式编译此代码: List<List> a = new ArrayList(); List<List<?>> b = new ArrayList(); a = b; // incompatible types b = a; // incompatible types List>b=newarraylist(); a=b; 工作 Set好的,这是由于一个微妙的语义差异 List 这是列表的原始类型,相当于T属于对象类型。所以这和说: List
List<List> a = new ArrayList();
List<List<?>> b = new ArrayList();
a = b; // incompatible types
b = a; // incompatible types
List>b=newarraylist();
a=b;
工作
Set好的,这是由于一个微妙的语义差异
List
这是列表
的原始类型,相当于T
属于对象
类型。所以这和说:
List<Object>
它会很好用的!这是因为对象
是相同的,或者是该类型的某个派生
List<?>
你会得到一个编译时错误 您能给出示例代码来说明如何调用它吗?不幸的是,当原始类型用作泛型类型参数时,规范变得非常模糊。在列表
和List@Radiodef这是一个注释,但它似乎在中起作用,但是如果你使用OP的未编辑代码,你会发现它不起作用!不,不是ArrayList这是不等价的。ArrayList x=new ArrayLista=b
有效,但不b=a
如果你读了这个问题,你会发现OP要的是真正的b=a
。说List
和说List
是不一样的——但你不是这一页上第一个提出这个主张的人。这种误解从何而来?我觉得很奇怪。List
和List
之间共享的语义子集与编译错误无关,这与泛型子类型规范中缺少原始类型有关。这并不能真正回答问题
List<Object>
List myList = new ArrayList();
myList.add(new Object());
List<?>
List<?> myList = new ArrayList<?>();
myList.add(new Object());