JAVA:如何在抽象类中使用泛型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (828)

我正在处理一个抽象类,其中实现类需要实现T的列表,问题是这样做不起作用:

public class AbstractClass
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass
{
    public List<Widgets> Items { get; set; }
}

而且我知道我可以构建一个抽象基类型来放入列表中,但是当我使用Linq命令构建列表时,抽象类型(ItemBase)并不能很好地处理.ToList()方法。我想要做的是如此独特吗?

提问于
用户回答回答于
  • 您需要声明类型T。
  • 您需要将抽象类声明为抽象类。
  • 您需要使用覆盖关键字。

试试这个:

public class Widgets { }

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public override List<Widgets> Items { get; set; }
}
用户回答回答于

您还需要类上的声明,才能知道哪种类型T是:

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public List<Widgets> Items { get; set; }
}

你也可以限制T可以是什么,比如说它必须实现IWidgets:

public class AbstractClass<T> where T : IWidgets

扫码关注云+社区

领取腾讯云代金券