如何将比较器与同一接口的 类 链接起来?
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
的比较器进行比较,即使 TestClassA
和 TestClassB
共享一个通用界面。
我想创建一个比较器,它可以让 类 的任何比较器共享相同的接口。但是下面的代码不起作用:
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
的比较器进行比较,即使 TestClassA
和 TestClassB
共享一个通用界面。