我正在学习泛型,所以我做了一个简单的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());
}
}
答案 0 :(得分:6)
<E extends List<E>>
几乎肯定不是你想要的。这就是你的元素类型是它自己的列表。
相反,只需编写<E>
。
答案 1 :(得分:4)
您的通用参数E
不应扩展列表。如果E extends List<E>
那么你应该期待List< List<> >
。
您的方法应该类似于:
public static <E> void printList(List<E> list) {
for (E obj : list) {
System.out.println(obj);
}
}
注意:
使用有意义的参数名称,例如list
而非l
,以便代码维护者了解您的代码
System.out.println(object.toString())
可简化为System.out.println(object)
,因为toString()
会自动调用
如果您希望代码更加健壮,请将参数设为List<E>
,以便您可以接受List<E>
所有LinkedList<E>
个对象以及所有其他实现。