java - 操作数类型错误

标签 java generics operand operands

我尝试使用泛型实现binarysearchtree(添加方法),但它给了我这种错误:

genericstree.java:36: error: bad operand types for binary operator '>'
            if ( value > iterator.m_Value )
                       ^
  first type:  T
  second type: T
  where T is a type-variable:
    T extends Comparable<T> declared in class BinarySearchTree
genericstree.java:42: error: bad operand types for binary operator '<'
        if ( value < prev.m_Value )
                   ^
  first type:  T
  second type: T
  where T is a type-variable:
    T extends Comparable<T> declared in class BinarySearchTree
2 errors

代码如下:

class BinarySearchTree<T extends Comparable<T>>
{
    class Node<T extends Comparable<T>>
    {
        Node<T> left;
        Node<T> right;
        T        m_Value;

        Node( T value )
        {
            left = null;
            right = null;
            m_Value = value;
        }
    }

    Node<T> m_Root;

    BinarySearchTree() { m_Root = null; }
    void addNode( T value )
    {
        Node<T> tmp = new Node<T>( value );
        if ( m_Root == null )
        {
            tmp.m_Value = value;
            m_Root = tmp;
            return;
        }

        Node<T> iterator = m_Root;
        Node<T> prev = m_Root;
        while ( iterator != null )
        {
            prev = iterator;
            if ( value > iterator.m_Value )
                iterator = iterator.right;
            else
                iterator = iterator.left;
        }

        if ( value < prev.m_Value )
            prev.left = tmp;
        else
            prev.right = tmp;
    }
}

我认为问题是替换的 T 对象可以是任何类型,然后它无法比较它们,但我用 Comparable 扩展了该类,但它没有修复它。

导致该问题的原因以及如何解决它?

最佳答案

您不能使用<>任何对象操作数上的运算符,即使它们实现 Comparable 。您只能将它们应用于数字操作数。

替换

if (value < prev.m_Value)

if (value.compareTo(prev.m_Value) < 0)

关于java - 操作数类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952655/

相关文章:

swift - 为什么struct在转换为字典时需要符合Hashable以及Generic数组

Java:操作数语句的含义

java - Servlet 中的线程

c# - 如何在 C# 中创建 UserControl<T>?

java - Android ListView 行选择

c# - 泛型 ListView 自定义控件

python - Python中带有负操作数的整数除法和模运算

python - 明显的 rpy2 用法会引发不支持的操作数类型异常

java - 不同数据类型的数学运算是否不同?

java - Android 上是 AES128 还是 AES256?