![](/img/trans.png)
[英]Incompatible types; found: interface java.util.List<java.lang.Object>, required: interface java.util.List<test.entity.Emp>
[英]Meaning of the different parameter types in java java.util.List interface
之间有什么区别
public List<?> myList;
和
public List<String> myList;
我知道后者会存储一个myList对象的List
(字符串),但不确定第一个对象是做什么的。我猜它会带任何type
对象。但是这样安全吗?
正如您已经说过的,第二个将包含字符串列表。 首先包含未知对象的列表,在使用它们之前,您需要明确地将它们转换为适当的对象。 将通配符与List<? extends ABC>
等继承一起使用时,还会有通配符的其他好处List<? extends ABC>
List<? extends ABC>
等。您需要遍历Java文档的通配符部分。
这是了解它们的简单教程http://tutorials.jenkov.com/java-generics/wildcards.html
是的,它不安全,这就是为什么在将其用作参数时无法添加到它的原因。 您只能从中阅读。
List<?>
表示键入未知类型的列表。 这可以是List<A>, a List<B>, a List<String>
等。
由于您不知道列表键入的类型,因此只能从集合中读取,并且只能将读取的对象视为对象实例。
public void processElements(List<?> elements){
for(Object o : elements){
System.out.println(o);
}
}
在这种方法中,您无法在“元素”中添加内容。 只读东西,因为您不知道元素是什么类型。
List<String>
是代表列表的Parameterized Type
该列表只能包含String类型的对象,而
List<?>
是一个Unbounded Wildcard Type
表示只能包含某些未知类型的对象的列表。
根据有效Java的规定 ,除了可以在运行时导致异常的Raw Type
List
外,这两种方法都可以安全使用,并且仅出于与引入泛型之前编写的旧代码的兼容性和互操作性而提供。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.