我有一个带有TreeMap字段的类时间轴和一个构造函数:
public class Timeline{
private TreeMap<DateTime, Schedulable> schedule;
public Timeline(TreeMap<DateTime, Schedulable> schedule) {
this.schedule = schedule;
}
}
我有一个以时间轴为字段的类Activity:
public class Activity extends Schedulable implements Serializable {
private Timeline legalTimes;
public Activity() {
legalTimes = new Timeline(new TreeMap<DateTime, LegalTime>());
//error here for can't find constructor ^^^^^
}
其中LegalTime扩展了Schedulable。
要求:
我认为这段代码应该可行,因为LegalTime是Schedulable的子类。我也无法添加第二个采用TreeMap的构造函数,因为它具有相同的擦除功能。
我该如何解决这个问题?
答案 0 :(得分:7)
通常,即使B
扩展A
,Type<B>
<{1}},因为Java泛型不变。这意味着Type<A>
不是TreeMap<DateTime, LegalTime>
,即使TreeMap<DateTime, Schedulable>
是LegalTime
。
解决方案:
Schedulable
。OR
TreeMap<DateTime, ? extends Schedulable>
成为通用的,通用类型参数为所需的特定Timeline
:尝试:
Schedulable
并且
public class Timeline<T extends Schedulable> {
private TreeMap<DateTime, T> schedule;
public Timeline(TreeMap<DateTime, T> schedule) {
this.schedule = schedule;
}
}
与
private Timeline<LegalTime> legalTimes;