Java 泛型集合的可能元素类型 List

Java 泛型集合的可能元素类型 List,java,generics,collections,Java,Generics,Collections,List您只能在第一种情况下添加MyClass的实例(使用super)?超级MyClass使列表成为消费者,它可以接收MyClass类型的对象。在第二种情况下,列表不能接收任何内容,它是一个生产者,一个只读列表。在第三种情况下,如果在之前进行向下转换,则可以添加MyClass的子类型:.add((T)object)并且它当然不会引发异常 第三种情况的正确语法应该是List,而T extends MyClass应该在类声明中。您不能像这样实际使用最后一个选项。它可以在类声明中使用,但不能在变量声明

List您只能在第一种情况下添加MyClass的实例(使用super)<代码>?超级MyClass
使列表成为消费者,它可以接收MyClass类型的对象。在第二种情况下,列表不能接收任何内容,它是一个生产者,一个只读列表。在第三种情况下,如果在之前进行向下转换,则可以添加MyClass的子类型:
.add((T)object)并且它当然不会引发异常


第三种情况的正确语法应该是
List
,而
T extends MyClass
应该在类声明中。

您不能像这样实际使用最后一个选项。它可以在类声明中使用,但不能在变量声明中使用

List<? super MyClass> parentsOfMyclass
List<? extends MyClass> childsOfMyclassFirst
List<T extends MyClass> childsOfMyclassSecond
静态类MyClass{}
静态类My2ndClass扩展了MyClass{}
静态类ListText{}
公共静态void main(字符串[]args){
列表
static class MyClass {}

static class My2ndClass extends MyClass {}

static class ListExt<T extends MyClass> {}


public static void main(String[] args) {
    List<? super MyClass> parentsOfMyclass;
    List<? extends MyClass> childsOfMyclassFirst;
    List<T extends MyClass> childsOfMyclassSecond; //error

    ListExt<? extends MyClass> extList;


    childsOfMyclassFirst.add(new MyClass()); //error 
    parentsOfMyclass.add(new MyClass());
    extList.add(new MyClass()); // error
}