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>();