我有一个函数返回一种泛型类K
,它扩展了Comparable
接口。此函数以递归方式调用自身。有趣的是,当它被调用时,我收到错误Type mismatch: cannot convert from Comparable to K.
public class NonEmptyTree<K extends Comparable<K>, V> implements Tree<K, V> {
Tree right;
K key;
...
public K max() throws EmptyTreeException {
try {
return right.max(); // "Type mismatch: cannot convert from Comparable to K"
} catch (EmptyTreeException e) {
return key;
}
}
...
}
将return语句更改为return (K) right.max();
会删除错误并产生预期的行为。
为什么必须使用强制转换?如何生成不需要强制转换的代码?
答案 0 :(得分:1)
问题出在right
的声明中。
而不是
Tree right;
应该是:
Tree<K, V> right;