2013-03-18 158 views
2

是否可以定义用于自定义对象的if语句比较的值?Java对象:在if语句中使用的返回值

我:

公共类元素实现可比{

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 
} 

}

我想用,如果声明如下:

如果(部件1> element2)..

而不是传统的:

如果(element1.value> element2.value)..

我一直无法与比较器来acomplish这个,的toString()等

+0

什么是'element1'和'element2'?如果它们是'element'类型的对象,那么你可以做'element1。compareTo(element2)'如果你正确实现了'compareTo()'。 – 2013-03-18 21:17:27

+0

你应该尝试更具体。您的要求不明确。 – 2013-03-18 21:17:39

+0

在java中没有运算符重载。 '<', '>'只能用于数字(byte,short,char,int,long,float,double)。 – MrSmith42 2013-03-18 21:19:17

回答

5

您不能使用>运算符的对象引用,每个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

不,这在Java中是不可能的。从JLS §15.20.1

的类型的每一个数值比较运算符 的操作数必须是一种类型的可转换(§5.1.8)为原始数字 类型,或编译时会出现误差。

这可能会出现在像Python这样的语言中,其中几乎所有的操作符都可以重载以使用非标准类。

0

Java不支持这一点。你可以像如下改用了一句:

if (element1.compareTo(element2) > 0) { 

} 

,并在你的compareTo方法,这样做:

public int compareTo(YourClassObject o) { 
    return (this.value - YourClassObject.value); 
} 
0

由于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 str1 = "This "; 
String str2 = "is a string"; 
str1 + str2 equals "This is a string"