是否可以定义用于自定义对象的if语句比较的值?
我有:
public class element实现Comparable {
public int value;
public int[] sequence;
public int length;
public element(){}
public element(int val){
this.value = val;
}
@Override
public int compareTo(Object o) {
return
}
}
我想使用if语句如下:
if(element1> element2)..
而不是传统的:
if(element1.value> element2.value)..
我无法用比较器,toString()等
来完成这个答案 0 :(得分:6)
根据JLS 15.20.1,您无法对>
运算符使用对象引用; Java不支持运算符重载。但是,使用Comparator
。
if (comparator.compare(element1, element2) > 0) // if (element1 > element2)
如果您的班级为Comparable<Element>
,也可以与其他元素相比。
if (element1.compareTo(element2) > 0) // if (element1 > element2)
答案 1 :(得分:2)
不,这在Java中是不可能的。来自JLS §15.20.1:
数值比较运算符的每个操作数的类型 必须是可转换(§5.1.8)到原始数字的类型 类型,或发生编译时错误。
这在Python这样的语言中是可能的,其中几乎所有运算符都可以重载以使用非标准类。
答案 2 :(得分:1)
Java并不支持这一点。你可以改用以下内容:
if (element1.compareTo(element2) > 0) {
}
并在您的compareTo方法中,执行以下操作:
public int compareTo(YourClassObject o) {
return (this.value - YourClassObject.value);
}
答案 3 :(得分:1)
由于Java不支持运算符重载,因此使用执行所需比较的方法比较这两个对象是最佳选择。
WrapperClass.compare(object1, object2) > 0 for object1.value > object2.value
WrapperClass.compare(object1, object2) < 0 for object1.value < object2.value
WrapperClass.compare(object1, object2) = 0 for object1.value == object2.value
String是提供运算符重载的类之一,就像连接运算符一样。
String str1 = "This ";
String str2 = "is a string";
str1 + str2 equals "This is a string"