Java 什么类型返回get方法?

Java 什么类型返回get方法?,java,list,generics,Java,List,Generics,如果类型变量是通配符,那么方法的返回类型是什么 public class MyClass{ } List<? extends MyClass> nms = new ArrayList<MyClass>(); nms.add(new MyClass()); //compilation error MyClass n = nms.get(0); //compiles fine CAP#2也会是MySubClass的子类型吗?即使你知道这一点 class MySubClas

如果类型变量是通配符,那么方法的返回类型是什么

public class MyClass{ }

List<? extends MyClass> nms = new ArrayList<MyClass>();
nms.add(new MyClass()); //compilation error
MyClass n = nms.get(0); //compiles fine
CAP#2
也会是
MySubClass
的子类型吗?

即使你知道这一点

class MySubClass extends MyClass{ }
编译器不能完全确定要添加到列表中的对象是否符合MyClass的未知子类型的限制,因为没有任何东西可以保证“未知”可以是MyClass的
MySubClass
。因此,它引发了一个错误

这是

因此,让您的列表定义为:

List<? extends MyClass> nms = new ArrayList<MyClass>();

ListNo,
那么这是否意味着这种语法基本上是无用的???如果是这样的话,为什么编译器甚至允许它呢???它不是无用的。这是一种只能从中读取的列表类型。请仔细阅读我提供的关于PEC的链接,你会发现其中的差别。:)“只能从中读取的列表类型”。这对于方法签名非常有用,例如,它不会不必要地限制其参数类型。
List<? extends MyClass> nms = new ArrayList<MyClass>();