繁体   English   中英

为什么我不能使用ArrayList <String> 作为通用ArrayList的参数 <E> 方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM