首先,我将尝试解释这段代码背后的想法。我有一堆可以处理某种类型的其他类(Processables)的类(Processors)。我有一个处理器列表,可以按特定顺序执行它们。我有一个地图,它将检索我要为某个处理器处理(Processables)的数据。它看起来像这样。
public abstract class AbstractProcessable {
...
}
public class DummyProcessable extends AbstractProcessable {
...
}
public abstract class AbstractProcessor<T extends AbstractProcessable> {
public abstract void process(List<T> listOfProcessables);
}
public class DummyProcessor extends AbstractProcessor<DummyProcessable> {
@Override
public void process(List<DummyProcessable> listToProcess) {
...
}
}
到目前为止,这似乎工作正常。没有编译错误。但现在我有一个像下面这样的类:
public class RandomClass {
private List<AbstractProcessor<? extends AbstractProcessable>> processors;
private Map<Class<? extends AbstractProcessor>, List<? extends AbstractProcessable>> data;
public RandomClass() {
processors = new ArrayList<>();
processors.add(new DummyProcessor());
data = new HashMap<>();
data.put(DummyProcessor.class, new ArrayList<DummyProcessable>());
processAll();
}
private void processAll() {
for (AbstractProcessor<? extends AbstractProcessable> processor : processors) {
List<? extends AbstractProcessable> dataToProcess;
dataToProcess = data.get(processor);
processor.process(dataToProcess); // compile error
}
}
}
编译错误:
The method process(List<capture#4-of ? extends AbstractProcessable>) in the type AbstractProcessor<capture#4-of ? extends AbstractProcessable> is not applicable for the arguments (List<capture#5-of ? extends AbstractProcessable>)
我知道它可能有点难以阅读,但我尽量简化它。我对泛型也不是很好,所以也许我用错了一些通配符?谁能帮我解决这个问题?
提前非常感谢!