首先发布在这里......
这是我定义的通用类:
public class TimeSeries<T extends Number> extends TreeMap<Integer, T>{
...
public Collection<Number> data() {
return this.values();
}
}
一点背景。 TimeSeries基本上是一种特定的TreeMap,其中键是整数,值是数字。
我的问题是数据方法因以下错误而中断:
error: incompatible types: Collection<T> cannot be converted to Collection<Number>
return this.values();
^
where T is a type-variable: T extends Number declared in class TimeSeries
值方法只返回一个T的集合。如果我特别声明T扩展了数字,为什么我不能将这个返回给方法?
提前致谢。
答案 0 :(得分:4)
您必须返回以下任何类型:
public Collection<? extends Number> data() {
return this.values();
}
或
public Collection<T> data() {
return this.values();
}
这样想:
TimeSeries<Integer> series = new TimeSeries<>();
// You want this:
Collection<Number> data = series.data();
// Oops, compiles, but not an Integer:
data.add(Long.valueOf(42));
更多信息:
答案 1 :(得分:1)
如果您想返回Collection<Number>
,可以使用Collections.unmodifiableCollection
对Collection<T>
制作只读视图:
public Collection<Number> data() {
return Collections.unmodifiableCollection(this.values());
}
unmodifiableCollection
及其Collections
类中的表兄弟非常方便将只读视图作为超类型集合的超类型集合。