Java 什么';这些泛型声明之间的区别是什么?

Java 什么';这些泛型声明之间的区别是什么?,java,generics,nested-generics,Java,Generics,Nested Generics,您如何用简单的英语描述这些列表内容之间的差异 我正在寻找一个可以作为参考的简单的比较 /* 1 */ List< List< Dog>> /* 2 */ List< List<? extends Dog>> /* 3 */ List<? extends List< Dog>> /* 4 */ List<? extends List<? ext

您如何用简单的英语描述这些列表内容之间的差异

我正在寻找一个可以作为参考的简单的比较

/* 1 */ List<          List<          Dog>>
/* 2 */ List<          List<? extends Dog>>
/* 3 */ List<? extends List<          Dog>>
/* 4 */ List<? extends List<? extends Dog>>
相关问题与资源
  • 一个
    列表
    ,其元素是狗的列表
  • 一种
    列表
    ,其元素是
    扩展Dog
  • 一种
    列表
    ,其元素是狗列表的单个子类型
  • 一种
    列表
    ,其元素是A的单个子类型(扩展Dog的
    类型的列表
  • 一种
    列表
    ,其元素是A的单个超类型(扩展Dog的类型的列表)
  • 一种
    列表
    ,其元素是A的单个子类型(类型为
    超级狗的列表
  • 其中,“子类型”、“超类型”、“超级”和“扩展”是“通用”版本(即,也包括边界类型)


    带有编号和子类型的示例,因为为什么不。将
    Dog
    替换为
    Number

  • List
    可能看起来像一个由
    Number
    元素组成的二维数组。很简单


  • List第一个是具体的:它是一个
    List的
    List的
    List的
    s的
    Dog的
    ,没有别的

    第二个是最里面声明的抽象:它是一个
    列表
    ,由
    列表
    继承自
    ——比如说
    狮子狗
    。它可能是一个
    列表

    第三个是内部列表声明的抽象:它是某种容器的
    list
    ,继承自
    list
    ——可能是
    ArrayList
    ——的
    Dog
    。然后您可能会有
    列表


    第四个是两个方面的抽象:它是一个从
    列表
    衍生出来的某种容器的
    列表
    ,里面装满了一些从
    继承来的动物——也许
    列表
    可以替换每一个“看一看,也考虑到最后2不会让你更新列表,第二个不会让你更新子列表作为极好的答案!请看一下后续报道question@MBlanc就这么做了。仍然在计算5,但我想我还有其他的。谢谢你的脑筋急转弯@你知道,我在日食中得到了一些非常奇怪的东西。当我使用
    让Eclipse计算出
    final的界限时List@MBlanc好吧,我想我把一切都弄明白了。希望我的逻辑有道理。如果我有什么错误或需要进一步解释,请告诉我。
    
    /* 5 */ List<? super   List<? extends Dog>>
    /* 6 */ List<? extends List<? super   Dog>>