方法中的接口类型,如何访问它?
Interface type in method, how do I access it?
我想用自定义 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>{..}
如果我只对 int 使用测试,有什么帮助吗?
编辑:感谢您的回复,我想指出我不能 使用 Comparable。
更确切地说:我想比较两个对象,一个是 Testing 类型的,另一个是 "Sorting" 类型的,它是给方法的。如何将 Sorting 转换为 Testing 类型,同时仍然能够比较这两者?
Edit2:我想我做到了,我会更新上面的代码,然后你也许可以理解我正在努力的事情,我仍然不知道为什么这完全有可能,但它似乎有效。
使用接口而不是具体类型。这样你就可以混合实现相同接口的不同具体类型。
要么你必须更改为 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(Integer other)
相比,您通过 compareTo(Sorting<Integer> other)
并没有真正获得太多收益,因为对方的实现并不重要,这就是 Comparable 这样做的原因。您现在也将无法使用 lambda,因为您的接口有 2 个抽象方法,但您仍然可以使用匿名 class。
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
}
我想用自定义 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>{..}
如果我只对 int 使用测试,有什么帮助吗?
编辑:感谢您的回复,我想指出我不能 使用 Comparable。 更确切地说:我想比较两个对象,一个是 Testing 类型的,另一个是 "Sorting" 类型的,它是给方法的。如何将 Sorting 转换为 Testing 类型,同时仍然能够比较这两者?
Edit2:我想我做到了,我会更新上面的代码,然后你也许可以理解我正在努力的事情,我仍然不知道为什么这完全有可能,但它似乎有效。
使用接口而不是具体类型。这样你就可以混合实现相同接口的不同具体类型。
要么你必须更改为 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(Integer other)
相比,您通过 compareTo(Sorting<Integer> other)
并没有真正获得太多收益,因为对方的实现并不重要,这就是 Comparable 这样做的原因。您现在也将无法使用 lambda,因为您的接口有 2 个抽象方法,但您仍然可以使用匿名 class。
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
}