我有这个界面
public interface IDataPoint<T> extends Comparable<T> {
public T getValue();
}
和这个实现......
public class IntegerDataPoint implements IDataPoint<Integer> {
// ... some code omitted for this example
public int compareTo(Integer another) {
// ... some code
}
}
和另一个班......
public class HeatMap<X extends IDataPoint<?> {
private List<X> xPoints;
}
现在我想在xPoints
列表中使用Collections.max(和类似的),但这不起作用,可能是因为我的泛型都搞砸了。
如何解决这个问题(没有Comparator
)?
Collections.max(xPoints);
给了我这个错误:
Bound mismatch: The generic method max(Collection<? extends T>) of type Collections is not applicable for the arguments (List<X>). The inferred type X is not a valid substitute for the bounded parameter <T extends Object & Comparable<? super T>>
答案 0 :(得分:4)
问题在于Collections.max(Collection<? extends T>)
希望T与自己相比而不是其他类型。
在您的情况下,IntegerDataPoint
可与 Integer
相媲美,但不能 IntegerDataPoint
您无法轻松解决此问题,因为IntegerDataPoint
不允许同时实施Comparable<Integer>
和Comparable<IntegerDataPoint>
。