如何将比较器与同一接口的 类 链接起来?

How to chain Comparators with classes of same interface?

我想创建一个比较器,它可以让 类 的任何比较器共享相同的接口。但是下面的代码不起作用:

public class MainApp {
    public void test() {
        ComparatorChain<TestInterface> comp = new ComparatorChain<>();
        comp.addComparator(new TestAComparator());
        // ERROR: The method addComparator(Comparator<TestInterface>) in the type ComparatorChain<TestInterface> is not applicable for the arguments (MainApp.TestAComparator)
    }

    //more comparators for each class implementing TestInterface
    class TestAComparator implements Comparator<TestClassA> { //TestClassA implements TestInterface
        @Override
        public int compare(TestClassA o1, TestClassA o2) {
            return 0;
        }
    }
}

public interface TestInterface {

}

//more classes that implement this interface
public class TestClassA implements TestInterface {

}

这里有什么问题?我怎样才能实现这种比较?

这是意料之中的。 ComparatorChain<TestInterface> 接受能够比较任何 class 实现 TestInterface 实例的比较器。您正在尝试向链中添加一个比较器,该比较器只能比较 TestClassA 的实例。因此,如果链接受此比较器,则在比较 TestClassA 实例以外的任何实例时都会失败,这会破坏其类型安全性。

你想做的根本不可能,因为你无法将 TestClassB 的实例与 TestClassA 的比较器进行比较,即使 TestClassATestClassB共享一个通用界面。