方法中的接口类型,如何访问它?

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
}