我正在为包含NonEmptyTree和EmptyTree对象的赋值创建一个多态二叉搜索树。每个NonEmptyTree都有一个可比较的键和一个与之关联的值(以及一个右侧和左侧的Tree对象)。
我正在编写一个查找方法,它接受一个关键对象并返回与之关联的值。
NonEmptyTree:
package tree;
@SuppressWarnings("unchecked")
public class NonEmptyTree<K extends Comparable<K>, V> implements Tree<K, V> {
private K key;
private V value;
private Tree left, right;
public NonEmptyTree(K key, V value) {
this.key = key;
this.value = value;
left = right = EmptyTree.getInstance();//Singleton class
}
public V lookup(K keyToLookFor) throws NullPointerException{
if (keyToLookFor.compareTo(key) > 0)
return right.lookup(keyToLookFor);
else if (keyToLookFor.compareTo(key) < 0)
return left.lookup(keyToLookFor);
else
return value;
}
}
EmptyTree:
public V lookup(K keyToLookFor) {
return null;
}
当我尝试返回right.lookup或left.lookup时,eclipse会出现类型不匹配错误,并要求我将其转换为V型,我不明白为什么。我们不允许在这个项目中使用cast,所以我真的可以使用一些帮助
答案 0 :(得分:1)
您需要限制左右成员的类型:
private Tree<K,V> left, right;
这样对left.lookup和right.lookup的调用将返回与包含类相同的V。