【发布时间】:2013-12-04 10:34:56
【问题描述】:
我遇到了 java 泛型的问题。我的计划是使用具有总排序的泛型实现二叉搜索树(键和值)。我首先创建了这个KeyValPair,然后遇到了获取正确 compareTo 方法的问题。
public class KeyValPair <V extends Comparable<V>>
implements Comparable<KeyValPair<V>>{
private int key;
private V value;
private KeyValPair<V> leftchild;
private KeyValPair<V> rightchild;
public KeyValPair(int k,V v){
key=k;
value=v;
}
public Comparable<?> getKey(){
return key;
}
public Comparable<?> getValue(){
return value;
}
public void setRightChild(KeyValPair<V> r){
rightchild=r;
}
public KeyValPair<V> getRightChild(KeyValPair<V> r){
return rightchild;
}
public void setLeftChild(KeyValPair<V> l){
leftchild=l;
}
public KeyValPair<V> getLeftChild(KeyValPair<V> l){
return leftchild;
}
@Override
public int compareTo(KeyValPair<V> toComp) {
if(this.getValue().compareTo(toComp.getValue())>0){
return -1;
}else if(this.getValue().compareTo(toComp.getValue())==0){
return 0;
}else{
return 1;
}
}
}
compareTo 中的 if 语句不被接受,我认为这是因为我覆盖了compareTo,但是我应该如何比较泛型?
还尝试了Comparable 而不是K,结果相同。
最好的问候
编辑:编译器说什么:这一行有多个标记 - Comparable 类型中的方法 compareTo(capture#1-of ?) 不适用于参数 (Comparable) - 行断点:KeyValPair [line: 39] - compareTo(KeyValPair)
EDIT2:
更新代码:
public class KeyValPair{
private int key;
private Comparable<?> value;
private KeyValPair leftchild;
private KeyValPair rightchild;
public KeyValPair(int k,Comparable<?> v){
key=k;
value=v;
}
public Comparable<?> getKey(){
return key;
}
public Comparable<?> getValue(){
return value;
}
public void setRightChild(KeyValPair r){
rightchild=r;
}
public KeyValPair getRightChild(KeyValPair r){
return rightchild;
}
public void setLeftChild(KeyValPair l){
leftchild=l;
}
public KeyValPair getLeftChild(KeyValPair l){
return leftchild;
}
}
现在我更新了 KEYVALPAIR 的代码,但是如果我用我的 BST 类和方法加法器作为示例对其进行测试:
private void adder(KeyValPair current,KeyValPair toInsert) {
if(toInsert.getValue().compareTo(current.getValue())>0){
//dosomething
}
}
它抛出: Comparable 类型中的 compareTo(capture#2-of ?) 方法不适用于 论据(可比)
解决方案:
我通过将 KEYVALPAIR 作为 BST 的内部类并使用 V 扩展 Comparable 来解决它。 现在可以使用,感谢您的帮助。
【问题讨论】:
-
“不被接受”是什么意思?编译器到底在告诉你什么?
-
“compareTo 中的 if 语句不被接受”是什么意思?我怀疑 getValue 应该返回类型 V 顺便说一句。
-
这一行有多个标记 - Comparable
类型中的方法 compareTo(capture#1-of ?) 不适用于参数 (Comparable ) - 行断点:KeyValPair [line: 39] - compareTo(KeyValPair )
标签: java generics binary-search-tree comparable compareto