【问题标题】:Java/Generics: Return a list of extending a type? [duplicate]Java/泛型:返回扩展类型的列表? [复制]
【发布时间】: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&lt;A&gt;。不需要类型变量。
  • 您定义了一个 List 并尝试向其中添加一个 Object。
  • 假设AAnimal 并且TDog。您要做的是创建一个List&lt;Dog&gt;,然后将Animal 添加到该列表中。这不起作用,因为Animal 不是Dog
  • 换句话说,你期望obj.&lt;B&gt;getList().get(0)的静态类型是什么?

标签: java generics inheritance compiler-errors


【解决方案1】:

您不能将A 的实例添加到扩展A 的类型列表中,例如List&lt;B&gt;,因为A 不是B(反之亦然)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多