【发布时间】:2015-06-03 10:00:48
【问题描述】:
我有课
public class ReportItem<ReportType extends Report>{ }
和班级
public abstract class Report implements Iterable<ReportItem>{
private List<ReportItem<? extends Report> > itemList;
public void add(ReportItem<? extends Report> item){
itemList.add(item);
}
//Some other staff
}
public class ConcreteReport extends Report{
//Some staff
}
问题是 add(ReportItem<? extends Report>) 方法不安全,因为我可以提供的项目与当前报告无关,但与其他报告相关,编译器不会抱怨。
是否可以以类型安全的方式编写方法 add,即我们可以仅将 ReportItem<T> 作为参数传递,其中 T 是当前报告的类型。
【问题讨论】: