有人可以解释我收到此错误的原因:方法compareTo(AVLNode)未定义类型AVLNode
这是我的Tree类的缩短版本:
public class AVLTree< E extends Comparable<E> >
{
private AVLNode<E> root ;
public AVLTree()
{
this.root = null;
}
public void insert ( AVLNode<E> item )
{
if( item.getLeft().compareTo(item.getItem() ) < 0) //ERROR IS HERE
{
}
}
}
以下是我的Node类的简短版本
class AVLNode <E extends Comparable<E> >
{
private AVLNode<E> item;
private AVLNode<E> left;
public AVLNode ( AVLNode<E> item)
{
this.item = item;
this.left = null;
}
public AVLNode( AVLNode<E> item, AVLNode<E> lft )
{
this.item = item;
this.left = lft;
}
public AVLNode<E> getItem()
{
return this.item;
}
public AVLNode<E> getLeft()
{
return this.left;
}
}
答案 0 :(得分:3)
当您要与Comparable
E
基类会假定您与AVLNode<E>
进行比较
因此,将其更改为继承Comparable<AVLNode<E>>
,看看会发生什么。
答案 1 :(得分:1)
你的AVLNode
课程显然应该是这样的:
public class AVLNode<E extends Comparable<E>> {
private E item;
//...
public int compareTo(final E obj) {
return this.item.compareTo(obj);
}
差异:
item
的类型应为E
而不是AVLNode<E>
,因为您要存储 E 而不是AVLNode
。要说明您的AVLNode
具有可比性,他们可以通过委派Comparable<T>
方法来实现E#compareTo()
:
public class AVLNode<E extends Comparable<E>> implements Comparable<AVLNode<E>> {
private E item;
//...
@Override
public int compareTo(final AVLNode<E> other) {
return this.item.compareTo(other.item);
}
}
答案 2 :(得分:0)
getLeft()
会返回AVLNode
。您尝试拨打getLeft().compareTo(...)
。这要求AVLNode
提供匹配方法。
由此:
class AVLNode <E extends Comparable<E> >
{
private AVLNode<E> item;
...
看起来您的节点只能容纳其他节点。据推测,您的商品实际上应该是类似的E
类型。然后,您可以检索该项目并在其上调用compareTo()
。
答案 3 :(得分:0)
这是因为AVLNode
如果您实施的方法没有名为compareTo()
的方法,则该问题应该得到解决。
您还应该决定是否要比较E
与E
或AVLNode
与AVLNode