据我所知,我可以用equals()Java 覆盖来处理我的类与之交互的方式==.我必须覆盖哪种方法来定义行为
MyClass obj1;
MyClass obj2;
if (obj1 > obj2){
...
}
Run Code Online (Sandbox Code Playgroud)
你不能.Java不支持自定义运算符重载.覆盖equals不会影响==.您可以获得的最接近的<是实现Comparable接口,其中包括一个compareTo方法.
http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
据我所知,我可以用Java覆盖equals()来处理我的类与==的交互方式
这是错的.这里已经解释了这个解释:我如何比较Java中的字符串?:
==参考平等测试.
.equals()测试价值平等.
对于你的问题:
与C++或C#不同,在Java中,您不能重载运算符.
而不是使用>和<运算符,你有两个选择.
制作MyClass工具Comparable:
public MyClass implements Comparable<MyClass> {
@Override
public int compareTo(MyClass other) {
//comparison logic here...
}
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
MyClass obj1 = ...;
MyClass obj2 = ...;
if (obj1.compareTo(obj2) > 0){
...
}
Run Code Online (Sandbox Code Playgroud)创建一个实现的类 Comparator
public class MyClassComparator implements Comparator<MyClass> {
@Override
public int compare(MyClass myClass1, MyClass myClass2) {
//comparison logic here...
}
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
MyClass obj1 = ...;
MyClass obj2 = ...;
MyClassComparator comp = new MyClassComparator();
if (comp.compare(obj1, obj2) > 0){
...
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |