二元运算符的错误操作数类型“>”?

时间:2012-02-22 21:02:29

标签: java tree binary-search-tree

我正在写一个BST计划。我收到错误:

“二元运算符的错误操作数类型”>“

第一种类型:java.lang.Object

第二种类型:java.lang.Object“

这是给我错误的方法:

public void placeNodeInTree(TreeNode current, TreeNode t)                                                                    
{   
    if(current == null)
        current = t;
    else{
       if(current.getValue() > t.getValue()) 
            current.setRight(t);
       if(current.getValue() < t.getValue()) 
            current.setLeft(t);  
        }
}

getValue()的返回类型为Object,因此java.lang.Object类型。这是我第一次见到这个错误。谁能给我一些关于这个错误的背景知识?谢谢

6 个答案:

答案 0 :(得分:6)

当然 - 您根本无法在对象之间应用>运算符。你期望它做什么?您不能应用任何其他二元运算符 - +-/等(字符串连接除外)。

理想情况下,您应该制作TreeNode 通用,并且要么Comparator<T>能够比较任意两个实例,要么制作T extend Comparable<T>。无论哪种方式,您都可以将它们与:

进行比较
int comparisonResult = comparator.compare(current.getValue(), t.getValue());
if (comparisonResult > 0) {
  // current "greater than" t
} else if (comparisonResult < 0) {
  // current "less than" t
} else {
  // Equal
}

int comparisonResult = current.getValue().compareTo(t.getValue());
// Code as before

如果没有泛型,您可以将值转换为Comparable或仍然使用普通Comparator ...但是泛型将是更好的选择。

答案 1 :(得分:5)

Java不支持运算符重载,因此没有为非基本类型定义<运算符。您可能希望改为使用Comparable<T>界面。

答案 2 :(得分:2)

您无法使用><比较对象。您需要使用某种方法比较它们,例如compareTo(您需要实现)。

答案 3 :(得分:2)

您无法将两个任意对象与>运算符进行比较。 >运算符只能(直接)用于原始整数类型。

你可以使你想要比较的对象实现接口java.lang.Comparable,然后调用它们上的compareTo方法来比较它们。

Comparable left = (Comparable)current.getValue();
Comparable right = (Comparable)t.getValue();

if (left.compareTo(right) > 0)
    current.setRight(t);

// etc.

答案 4 :(得分:1)

equals的默认实现仅关注引用相等性。一个物体不知道Cat是否比Apple更大,也不关心它。您应该提供一个覆盖equals和hashcode的具体实现,以及实现Comparable接口。这将允许您确定事实上Cat是否大于Apple。

答案 5 :(得分:-1)

我认为你可以使用另一个原始变量,例如

int temp=(int)current.getValue();