【问题标题】:How to inherit Generic types [duplicate]如何继承通用类型[重复]
【发布时间】:2020-05-01 03:52:21
【问题描述】:

我有两个包,两个包都有 Excel 类以及 Invoices 和 Packing 类,我想创建一个 Excel,我可以从中扩展,每个 excel 都需要了解 Invoice 和 Packing Lists

public class Excel {

   protected final List<? extends T> invoices;
   protected final List<? extends T> packing;

   public Excel(List<? extends T> invoices, List<? extends T> packing) {
      this.invoices = invoices;
      this.packing = packing;
   }
}

我在另一个 Excel 类中扩展了该 Excel,在构造函数 super(invoices,packing) 中它说需要类型 List ? extends T 提供 List Invoices List Packing

public Excel(List<Invoice> invoices, List<PackingList> packingLists) {
    super(invoices,packingLists);

【问题讨论】:

  • T 是泛型类型参数吗?如果是,在哪里声明?
  • @Eran 我创建了字段,认为 List 可以接受他喜欢的任何东西,然后在扩展该类时只需传递特定类的列表
  • 什么是T?如果它是泛型类型参数,则应在类级别或任何相关方法中声明。如果不是,这意味着您必须有一些名为 T 的类或接口。
  • 这能回答你的问题吗? Instantiating a generic class in Java

标签: java generics


【解决方案1】:

通过插件添加到您的班级

 public class Excel <T>{

   protected final List<? extends T> invoices;
   protected final List<? extends T> packing;

   public Excel(List<? extends T> invoices, List<? extends T> packing) {
      this.invoices = invoices;
      this.packing = packing;
   }
}

现在当你想调用它时,你可以像这样扩展它

public class Something extends Excel <YourClass>

【讨论】:

    【解决方案2】:

    正如 Eran 指出的那样。如果您想使用泛型参数,您需要在某处声明它们。这里你没有声明T,所以你不能使用它。

    使用以下代码:

    public class Excel<T> {
    
    // ...
    
    }
    

    当您创建一个新的 Excel 时,您将能够指定您想要的类型:

    Excel<MyType> excel = new Excel<>();
    

    你也可以实现一个通用接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-17
      • 2011-08-19
      • 2020-01-18
      • 2019-09-02
      • 2013-02-11
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      相关资源
      最近更新 更多