我认为您正在寻找以下内容。
public abstract class Report<T extends Report<T>> implements Iterable<ReportItem<T>>{ private List<ReportItem<T>> itemList; public void add(ReportItem<T> item){ itemList.add(item); } //Some other stuff}public class ConcreteReport extends Report<ConcreteReport> { //Some stuff}
它的工作方式是:
- 您想
ReportItem<T>
用从Report
- 您要确保
ReportItem<T>
所有列表都属于同一类型Report
为了将
T参数绑定
ReportItem<T>到从扩展的对象
Report,您需要对
Report自身进行参数化:
public abstract class Report<T> implements Iterable<ReportItem<T>>
您添加需要从报表扩展的绑定
public abstract class Report<T extends Report> implements Iterable<ReportItem<T>>
但是您要 为报表 的 原始类型 指定界限,该界限无效,因此您需要提供
Report报表接收的type参数,即
T。
public abstract class Report<T extends Report<T>> implements Iterable<ReportItem<T>>
这样,您就可以
List<ReportItem<T>>使用扩展的具体类型对参数进行参数化:
public class ConcreteReport extends Report<ConcreteReport> {
这样列表将
public List<ReportItem<ConcreteReport>> itemlist;
这就是你想要的。
而且有效!:)我只是希望我的解释有意义。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)