为什么我得到“Pair无法转换为java.lang.Comparable”错误?

时间:2017-07-09 09:40:26

标签: java

我有这堂课:

public class Pair<V> implements Map.Entry<V,V> {
    private V first;
    private V second;
    public Pair(){

    }
    public Pair (V first, V second){
        this.first = first;
        this.second = second;
    }

    @Override
    public V getKey() {
        return first;
    }

    @Override
    public V getValue() {
        return second;
    }

    @Override
    public V setValue(V value) {
        this.second = value;
        return null;
    }

    @Override
    public String toString() {
        return "Pair{" +
                "first=" + first +
                ", second=" + second +
                '}';
    }
}

在Program类中我有这个方法:

public static <K,V extends Comparable> Pair<V> minmax(Map<K,V> map) {
    List<V> values = new ArrayList<V>(map.values());
    List<K> keys = new ArrayList<K>(map.keySet());
    V min = (V)min(values);
    V max = (V)max(values);
    V minKey = (V)map.get(min);
    V maxKey = (V)map.get(max);

    Pair minPair = new Pair(minKey,min);
    Pair maxPair = new Pair(maxKey,max);
    return new Pair((V)minPair,(V)maxPair);
}

这里调用上述方法的行:

    Pair minMax2 = minmax(mapGrades);

但在这一行:

 return new Pair((V)minPair,(V)maxPair);

我收到此错误:

Exception in thread "main" java.lang.ClassCastException: Pair cannot be cast to java.lang.Comparable
    at Program.minmax(Program.java:35)
    at Program.main(Program.java:14)

我知道为什么会出现上述错误以及如何修复它?

1 个答案:

答案 0 :(得分:2)

minPairmaxPair属于Pair类型(您可以将它们定义为Pair<V>)。您无法将它们转换为V

new Pair(minPair,maxPair)的类型可以是Pair<Pair<V>>,而不是Pair<V>

此外,由于您的方法应返回Pair<V>,因此可以返回

Pair<V> minPair = new Pair<>(minKey,min);

Pair<V> maxPair = new Pair<>(maxKey,max);    

但不是new Pair(minPair,maxPair)