【发布时间】:2012-10-31 07:14:56
【问题描述】:
首先我将尝试解释这段代码背后的想法。 我有一堆类(Processors)可以处理某种类型的其他类(Processables)。我有一个处理器列表,可以按特定顺序执行它们。我有一个地图,它将检索我要为某个处理器处理(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>)
我知道它可能有点难以阅读,但我尽量简化它。我对泛型也不是很好,所以也许我用错了一些通配符? 谁能帮我解决这个问题?
提前非常感谢!
【问题讨论】:
-
请发布你得到的完整错误,以便详细检查
-
能否在派生类的process()方法中添加“@Override”注解,看看编译器是否报错?
-
添加了覆盖。覆盖一直在那里,我只是在这里忘记了。此外,错误消息现在是代码,因为它已被更改...
标签: java generics collections wildcard