java ? Collection 中的 super T 复制为什么正确工作

标签 java

    List<String> srcList = new ArrayList<>();
    srcList.add("a");
    srcList.add("b");
    srcList.add("c");

    List<String> descList = new ArrayList<>(3);
    descList.add("1");
    descList.add("2");
    descList.add("3");
    // public static <T> void copy(List<? super T> dest, List<? extends T> src)
    Collections.copy(descList, srcList);

    for (String item: descList) {
        System.out.println(item);
    }

    List<? super String> listC = new ArrayList<>();
    listC.add("A");
    listC.add("B");
    listC.add("C");

    Collections.copy(listC, srcList);

    for (String item : listC) { System.out.println(item); }// complie error.

<? super T>表示T或T的父类(super class)。 在方法Collections.copy()中参数dest可以纠正 foreach 上的工作。 为什么自定义列表对象 listC无法获取此列表的项目。

最佳答案

通过声明List<? super String> listC ,你是说listC可能是List<String> ,或 List<Object>List<CharSequence> ,或 List String 的任何其他父类(super class)型.

现在,行for (String item: listC)没有意义,因为如果 listCList<Object> ,或 List<String> 以外的其他内容,那么它的内容不一定是String s。这就是编译器告诉您的内容。

关于 java ? Collection 中的 super T 复制为什么正确工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47707599/

相关文章:

java - 如何使用正则表达式分割2个字符串?

java - 对静态方法或返回 lambda 的静态方法的方法引用

java - 在 JOGL 中进行翻译后无法按预期使用 glLoadIdentity

java - java中的简单日期格式化程序问题

Java多线程消息传递

java - 打印 Java 应用程序的命令行参数数量

java - 使用JPanel绘制直线并获取点坐标

java - 在 JInternalFrame 中单击关闭 (X) 按钮时如何执行某些操作

java - 如何使算法在Java中更有效地查找集合中的重复对象?

java - PrintWriter——没有输出?