我正在写一个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类型。这是我第一次见到这个错误。谁能给我一些关于这个错误的背景知识?谢谢
答案 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();