我想使用自定义compareTo方法
定义自定义接口“Sorting”public class Testing implements Sorting{
public static void main(String [] args){
Testing x1 = new Testing (4);
Testing x2 = new Testing (5);
System.out.println(x1.compareTo(x2));
}
private final int x;
public Testing(int x){
this.x= x;
}
@Override
public int compareTo(Sorting s) {
if(this == s)
return 0;
if(this.x> ((Testing) s).x) return 1;
if(this.x<((Testing) s).x) return -1;
return 0;
}
}
我不知道如何访问所说的compareTo方法来比较这些值,但我希望能够将它用于整数,字符串以及适合排序的各种类型。
另外,
public class Testing<Integer> implements Sorting<Integer>{..}
如果我只使用Testing for int,那么可以帮助吗?
编辑:感谢您的回复,我想指出我不能使用Comparable。 更确切地说:我想比较两个对象,一个是测试类型,另一个是“排序”类型,它被赋予方法。如何将Sorting转换为Testing类型,同时仍能比较这两个?
Edit2:我想我管理了它,我会更新上面的代码,然后你可以理解我正在努力的事情,我仍然不知道为什么确切可能,但似乎有效。
答案 0 :(得分:1)
使用接口而不是具体类型。这样,您可以混合实现相同接口的不同具体类型。
您必须更改为compareTo(V other)或者您必须向您的界面添加更多内容,如下所示:
public interface Sorting <V> {
V getValue();
int compareTo(Sorting<V> other);
}
public class Testing implements Sorting<Integer>{
public static void main(String [] args){
Sorting<Integer> x1 = new Testing (4);
Sorting<Integer> x2 = new Testing (5);
System.out.println(String.format("compareTo is %d", x1.compareTo(x2));
}
private final int value;
public Testing(int value){
this.value = value;
}
@Override
int getValue(){
return value;
}
@Override
public int compareTo(Sorting<Integer> other) {
int otherValue = other.getValue();
if(value > otherValue)
return 1;
else if(value < otherValue)
return -1;
return 0; // must be ==
}
}
请注意,通过执行compareTo(Sorting<Integer> other)
而不是compareTo(Integer other)
实际上并没有获得太多收益,因为其他实现并不重要,这就是Comparable就是这样做的原因。您现在也无法使用lambda,因为您的接口有2个抽象方法,但您仍然可以使用匿名类。
int someInt = 12344;
x1.compareTo(new Sorting<Integer>() {
@Override int getValue(){ return someInt; }
@Override int compareTo(Sorting<Integer> other) { return 0; }// who cares isn't used
}