Java-列表使用通配符创建arraylist
我创建了如下语法的arraylist:Java-列表使用通配符创建arraylist,java,generics,wildcard,Java,Generics,Wildcard,我创建了如下语法的arraylist: List<?> obj = new ArrayList<Object>(); List obj=new ArrayList(); 如果我尝试添加一个新对象或任何类似字符串的对象。它给了我编译错误: obj.add(new Object()); The method add(capture#1-of ?) in the type List<capture#1-of ?> is not applicable for t
List<?> obj = new ArrayList<Object>();
List obj=new ArrayList();
如果我尝试添加一个新对象或任何类似字符串的对象。它给了我编译错误:
obj.add(new Object());
The method add(capture#1-of ?) in the type List<capture#1-of ?> is not applicable for the arguments (Object)
obj.add(newobject());
类型列表中的add(capture#1-of?)方法不适用于参数(Object)
我可以在
obj
中添加哪些对象?我们不能向其中添加任何内容(唯一的例外是null)。见:
向其中添加任意对象是不安全的,但是:
Collection c=newarraylist()代码>
c.add(newobject())//编译时错误
因为我们不知道c的元素类型代表什么,所以我们不能
向其中添加对象。add()方法接受类型为E的参数
集合的元素类型。当实际类型参数为?时?,
它代表某种未知类型。我们传递给add的任何参数都将
必须是此未知类型的子类型。因为我们不知道是什么
也就是说,我们不能传递任何内容。唯一的例外是null,
它是每种类型的成员
我们不能添加任何内容(唯一的例外是null)。见:
向其中添加任意对象是不安全的,但是:
Collection c=newarraylist()代码>
c.add(newobject())//编译时错误
因为我们不知道c的元素类型代表什么,所以我们不能
向其中添加对象。add()方法接受类型为E的参数
集合的元素类型。当实际类型参数为?时?,
它代表某种未知类型。我们传递给add的任何参数都将
必须是此未知类型的子类型。因为我们不知道是什么
也就是说,我们不能传递任何内容。唯一的例外是null,
它是每种类型的成员
您只能在声明的列表中添加null
:
List<?> obj = ...
您只能在声明的列表中添加null
:
List<?> obj = ...
List
的意思是“它是一个列表,但我不知道列表中是什么类型的对象”。即使您已将其声明为新列表()
,但稍后也可以将其重新分配给新列表()
(例如)。在列表中添加新对象()
不是一个好主意
在您的情况下,您应该将其声明为列表
,而不是列表列表
的意思是“它是一个列表,但我不知道列表中的对象类型”。即使您已将其声明为新列表()
,但稍后也可以将其重新分配给新列表()
(例如)。在列表中添加新对象()
不是一个好主意
在您的情况下,您应该将其声明为列表
,而不是列表列表
是一个,除了null
之外,您不能向其添加任何内容。您不能添加任何带有?
的内容。请记住PECS。有关通配符的详细说明,请参阅。是否要避免重复字符串
?好的,使用菱形运算符。列表
是一个,除了null
之外,您不能向其中添加任何内容。您不能使用?
添加任何内容。请记住PECS。有关通配符的详细说明,请参阅。是否要避免重复字符串
?好的,用菱形操作符。我不明白下一票。有时候很郁闷,我不明白为什么会投反对票。有时令人沮丧。
List<Integer> integerList = ...;
foo(integerList);
void foo(List<?> anyList) {
...
}
List<Object> obj = ...