我一直在环顾四周,看看是否能找到可以帮助我解决问题的方法,但直到现在还没有运气。我有以下课程:
public interface ISort<T> {
public List<T> sort(List<T> initialList);
}
public abstract class Sort<T> implements ISort<T> {
private Comparator<? super T> comparator;
public Sort(Comparator<? super T> comparator) {
this.comparator = comparator;
}
@Override
public List<T> sort(List<T> initialList) {
ArrayList<T> list = new ArrayList<T>(initialList);
Collections.sort(list, comparator);
return list;
}
}
public abstract class InternalTreeItem<T> {
public abstract String getValue();
}
public class D extends InternalTreeItem<Integer> {
private Integer i;
public D(Integer i) {
this.i = i;
}
@Override
public String getValue() {
return i.toString();
}
public Integer getInteger() {
return i;
}
}
public class DComparator implements Comparator<D> {
@Override
public int compare(D o1, D o2) {
return o1.getInteger() - o2.getInteger();
}
}
public class DSort extends Sort<D> {
public DSort(Comparator<D> comparator) {
super(comparator);
}
public DSort() {
super(new DComparator());
}
}
和测试类:
public class TestClass {
@Test
public void test1() {
List<InternalTreeItem<?>> list= new ArrayList<InternalTreeItem<?>>();
list.add(new D(1));
list.add(new D(10));
list.add(new D(5));
ISort<?> sorter = new DSort();
sorter.sort(list);
}
}
编译器在该行给出错误
sorter.sort(list);
和状态
The method sort(List<capture#2-of ?>)
in the type ISort<capture#2-of ?>
is not applicable for the arguments
(List<InternalTreeItem<?>>)
好的,经过几个小时和朋友的帮助,我们意识到问题出sort(List<T> list, Comparator<? super T> c)
在抽象类 Sort 中的 Collections# 上,因为我使用Comparator<? extends T>
.
我使用泛型,因为我有 2 个模型,一个模型的超类是由 35 个类子类的泛型抽象子类,而第二个模型实际上有 2 个不同的超类,它们组合在一起,又被 35 个类子类化。这些层次结构是给定的,我无法修改它们。
这里的模型非常简单,但你明白了。此外,还有一个工厂,根据 T 的类型,返回一个或另一个分拣机。
任何人都可以为我的问题提供帮助并提供解决方案(即对通用列表进行排序;参数类型可以是通用超类或其子类之一)。
谢谢和最好的问候, 多米