Java Collection比较扩展可扩展接口的泛型类

时间:2012-04-18 14:10:36

标签: java generics

我有这个界面

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>>

1 个答案:

答案 0 :(得分:4)

问题在于Collections.max(Collection<? extends T>)希望T与自己相比而不是其他类型。

在您的情况下,IntegerDataPoint可与 Integer 相媲美,但不能 IntegerDataPoint

您无法轻松解决此问题,因为IntegerDataPoint不允许同时实施Comparable<Integer>Comparable<IntegerDataPoint>