Comparable 类型的方法 compareTo(Comparable) 未定义
The method compareTo(Comparable) is undefined for the type Comparable
所以我正在构建一个库作为项目,它涵盖了大部分数据结构,但我发现自己遇到了这个问题:
package structure.tree;
import structure.Structure;
import structure.node.BinaryNodeKeyValue;
public class AVLTree<Comparable,V> extends Tree<BinaryNodeKeyValue<Comparable,V>> {
private static final long serialVersionUID = 5046115177325966348L;
public AVLTree(){
}
@Override
public int compareTo(Structure<BinaryNodeKeyValue<Comparable,V>> o) {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean containsValue(BinaryNodeKeyValue<Comparable,V> elem) {
return containsValueAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), elem);
}
private boolean containsValueAux(BinaryNodeKeyValue<Comparable,V> root, BinaryNodeKeyValue<Comparable,V> elem){
if(root == null) return false;
else {
if(root.equals(elem)) return true;
else return containsValueAux(root.getLeft(), elem) || containsValueAux(root.getRight(), elem);
}
}
public boolean containsKey(Comparable key){
return containsKeyAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), key);
}
private boolean containsKeyAux(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
if(root == null) return false;
else {
if(root.getKey().compareTo(key) > 0) return containsKeyAux(root.getRight(), key);
else if(root.getKey().compareTo(key) < 0) return containsKeyAux(root.getLeft(), key);
else return true;
}
}
@Override
public void deleteValue(BinaryNodeKeyValue<Comparable,V> elem) {
// TODO Auto-generated method stub
}
@Override
public void insertValue(BinaryNodeKeyValue<Comparable,V> elem) {
// TODO Auto-generated method stub
}
@Override
public BinaryNodeKeyValue<Comparable,V>[] toArray() {
// TODO Auto-generated method stub
return null;
}
public BinaryNodeKeyValue<Comparable,V> get(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
return getAux(root, key);
}
private BinaryNodeKeyValue<Comparable, V> getAux(BinaryNodeKeyValue<Comparable, V> root, Comparable key) {
return null;
}
}
在第 40 行和第 41 行(方法 containsKeyAux 的第 3 行和第 4 行)它说“方法 compareTo(Comparable) 未定义类型 Comparable”,这让我大吃一惊,因为方法 compareTo 实际上是在 Comparable 接口中定义的只要。
VS Code 还在第 6 行向我显示一条警告,上面写着“类型参数 Comparable 隐藏了 Comparable 类型”,但我试图使 Comparable 类型尽可能通用,因为节点的键可以是字符串、整数或不同类型的对象。
当你像这样声明一个泛型时 AVLTree<Comparable,V>
你已经创建了一个 class 具有两个泛型类型 Comparable 和 V 并且 Comparable 与接口 Comparable
无关,它们只是刚好同名
你的意思可能是
class AVLTree<T extends Comparable, V>
所以我正在构建一个库作为项目,它涵盖了大部分数据结构,但我发现自己遇到了这个问题:
package structure.tree;
import structure.Structure;
import structure.node.BinaryNodeKeyValue;
public class AVLTree<Comparable,V> extends Tree<BinaryNodeKeyValue<Comparable,V>> {
private static final long serialVersionUID = 5046115177325966348L;
public AVLTree(){
}
@Override
public int compareTo(Structure<BinaryNodeKeyValue<Comparable,V>> o) {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean containsValue(BinaryNodeKeyValue<Comparable,V> elem) {
return containsValueAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), elem);
}
private boolean containsValueAux(BinaryNodeKeyValue<Comparable,V> root, BinaryNodeKeyValue<Comparable,V> elem){
if(root == null) return false;
else {
if(root.equals(elem)) return true;
else return containsValueAux(root.getLeft(), elem) || containsValueAux(root.getRight(), elem);
}
}
public boolean containsKey(Comparable key){
return containsKeyAux(((BinaryNodeKeyValue<Comparable,V>) super.getValue()), key);
}
private boolean containsKeyAux(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
if(root == null) return false;
else {
if(root.getKey().compareTo(key) > 0) return containsKeyAux(root.getRight(), key);
else if(root.getKey().compareTo(key) < 0) return containsKeyAux(root.getLeft(), key);
else return true;
}
}
@Override
public void deleteValue(BinaryNodeKeyValue<Comparable,V> elem) {
// TODO Auto-generated method stub
}
@Override
public void insertValue(BinaryNodeKeyValue<Comparable,V> elem) {
// TODO Auto-generated method stub
}
@Override
public BinaryNodeKeyValue<Comparable,V>[] toArray() {
// TODO Auto-generated method stub
return null;
}
public BinaryNodeKeyValue<Comparable,V> get(BinaryNodeKeyValue<Comparable,V> root, Comparable key){
return getAux(root, key);
}
private BinaryNodeKeyValue<Comparable, V> getAux(BinaryNodeKeyValue<Comparable, V> root, Comparable key) {
return null;
}
}
在第 40 行和第 41 行(方法 containsKeyAux 的第 3 行和第 4 行)它说“方法 compareTo(Comparable) 未定义类型 Comparable”,这让我大吃一惊,因为方法 compareTo 实际上是在 Comparable 接口中定义的只要。 VS Code 还在第 6 行向我显示一条警告,上面写着“类型参数 Comparable 隐藏了 Comparable 类型”,但我试图使 Comparable 类型尽可能通用,因为节点的键可以是字符串、整数或不同类型的对象。
当你像这样声明一个泛型时 AVLTree<Comparable,V>
你已经创建了一个 class 具有两个泛型类型 Comparable 和 V 并且 Comparable 与接口 Comparable
无关,它们只是刚好同名
你的意思可能是
class AVLTree<T extends Comparable, V>