【发布时间】:2019-05-08 13:40:49
【问题描述】:
如果我有以下情况:
class A {}
class B extends A {}
public <T extends A> List<T> getList() {
List<T> list = new ArrayList<>();
list.add(new A());
return list;
}
但我得到了错误:add(T) in List cannot be applied to A
我想做的是返回一个 A 类或任何扩展 A 类的类的列表。为什么它在这里不起作用?
【问题讨论】:
-
如果要返回包含 A 实例的列表,请将返回类型设为
List<A>。不需要类型变量。 -
您定义了一个 List
并尝试向其中添加一个 Object。 -
假设
A是Animal并且T是Dog。您要做的是创建一个List<Dog>,然后将Animal添加到该列表中。这不起作用,因为Animal不是Dog。 -
换句话说,你期望
obj.<B>getList().get(0)的静态类型是什么?
标签: java generics inheritance compiler-errors