compareTo要我演员,我不知道为什么

时间:2014-10-21 09:31:33

标签: java

有人可以解释我收到此错误的原因:方法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;
}

}

4 个答案:

答案 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()的方法,则该问题应该得到解决。

您还应该决定是否要比较EEAVLNodeAVLNode