Java - 使用通配符列表创建数组列表

标签 java generics wildcard

我创建了一个像这样的语法的数组列表:

List<?> obj = new ArrayList<Object>();

如果我尝试添加一个新对象或任何对象(例如 String.它给了我编译错误:

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 中添加哪些对象?.

最佳答案

您只能添加 nullList声明:

List<?> obj = ...

否则你可能会破坏类型安全,因为这是合法的:

List<?> anyList = ...;
List<Integer> integerList = ...;
anyList = integerList;

这也是合法的:

List<Integer> integerList = ...;
foo(integerList);

void foo(List<?> anyList) {
   ...  
}

如果您可以在 List<?> 中添加任何内容例如 StringintegerList 引用的列表对象不仅不会包含 Integer不再。

List 中添加任何元素,只需使用 Object类型:

List<Object> obj = ...

关于Java - 使用通配符列表创建数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51347669/

相关文章:

java - 关于在 Eclipse 中调试 SWIG 包装的 C++ 代码的技巧?

ios - 两个用 NSIndexPath 填充的通用数组的补充/交集

javascript - Javascript 不支持参数多态性(通用编程)?

java - 带有图像/jpeg 的 Android HttpURLConnection POST 请求

java - 网页的上次修改和大小

javafx 程序中的 java.lang.reflect.InitationTargetException

Scala 上限和下限类型

正则表达式非贪婪地匹配多行直到以特定字符串开头的行

bash - 在 bash 脚本中将通配符作为参数替换到文件路径后如何扩展通配符?

java - Java中的所有通配符都可以用非通配符类型代替吗?