我有这个界面

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

最佳答案

问题是Collections.max(Collection<? extends T>)希望T与自己具有可比性,而不是其他类型。

就您而言,IntegerDataPointInteger类似,但与IntegerDataPoint不相当

您不能轻易解决此问题,因为不允许IntegerDataPoint同时实现Comparable<Integer>Comparable<IntegerDataPoint>

关于java - Java Collection比较通用类,扩展接口(interface),扩展可比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10211180/

10-08 23:16