[英]Why can't I use ArrayList<String> as a parameter for a generic ArrayList<E> method?
我正在学习泛型,因此我编写了一个简单的Java程序,以便可以了解它们的确切工作方式。 但是现在我被这个程序困扰了,因为我不明白为什么它不起作用。
public static void main(String[] args)
{
ArrayList<String> strings = new ArrayList<>();
strings.add("A");
strings.add("B");
printList(strings);
}
public static <E extends List<E>> void printList(ArrayList<E> l)
{
for (E obj : l)
{
System.out.println(obj.toString());
}
}
<E extends List<E>>
几乎可以肯定不是您想要的。 这说明您的元素类型是其自身的列表。
而是只写<E>
。
您的通用参数E
不应扩展列表。 如果E extends List<E>
那么您应该期望List< List<> >
。
您的方法应类似于:
public static <E> void printList(List<E> list) {
for (E obj : list) {
System.out.println(obj);
}
}
笔记:
使用有意义的参数名称(例如list
not l
以便代码维护人员理解您的代码
System.out.println(object.toString())
可以简化为System.out.println(object)
因为toString()
将被自动调用
如果希望代码更健壮,请将参数设置为List<E>
以便可以接受所有List<E>
对象,例如LinkedList<E>
和所有其他实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.