我有这堂课:
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)
我知道为什么会出现上述错误以及如何修复它?
答案 0 :(得分:2)
minPair
和maxPair
属于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)
。