这个问题在这里已有答案:
所以我试图使代码通用,我遇到了这个问题,我得到一个错误,说明二元运算符的坏操作数类型 .
这是一个例子:
if(compare(data < root.data))
我得到上面说的错误 . 有关如何修复它的任何提示?
我在开始时有这个设置:
class Node<T> { T data; Node<T> left, right; Node(T data) { this.data = data; } }
Java不支持运算符重载,<运算符是为原始数据类型定义的,如(int,double ..) .
它没有为非基本类型或用户定义类型定义 .
您应该使用Comparable接口而不是< .
您调用 data < root.data 但操作符 < 或其他类似操作符 only defined 适用于 primitive datatypes ,如 int , long , double , float .
data < root.data
<
int
long
double
float
与其他支持 operator overloading 的语言相比,您无法在对象上调用 < .
但是,您可以让对象实现 Comparable (documentation),它提供了基本上相同的 compareTo 方法 . 然后你可以像这样调用它:
Comparable
compareTo
data.compareTo(root.data);
并且它返回 negative - , positive - 或 zero -value,基于第一个参数是 less , greater 还是 equal 第二个参数 .
那么相当于 data < root.data 将是:
data.compareTo(root.data) < 0
作为示例,类 String 已实现 Comparable ,它返回字典顺序 . "A".compareTo("B") 因此会 negative ,这意味着 "A" 的字典小于 "B" .
String
"A".compareTo("B")
"A"
"B"
2 回答
Java不支持运算符重载,<运算符是为原始数据类型定义的,如(int,double ..) .
它没有为非基本类型或用户定义类型定义 .
您应该使用Comparable接口而不是< .
您调用
data < root.data
但操作符<
或其他类似操作符 only defined 适用于 primitive datatypes ,如int
,long
,double
,float
.与其他支持 operator overloading 的语言相比,您无法在对象上调用
<
.但是,您可以让对象实现
Comparable
(documentation),它提供了基本上相同的compareTo
方法 . 然后你可以像这样调用它:并且它返回 negative - , positive - 或 zero -value,基于第一个参数是 less , greater 还是 equal 第二个参数 .
那么相当于
data < root.data
将是:作为示例,类
String
已实现Comparable
,它返回字典顺序 ."A".compareTo("B")
因此会 negative ,这意味着"A"
的字典小于"B"
.