我有一个声明如下的列表,我打算在其中添加对象。
List<RecursableAction<Recursable, AbstractContext>> actions = new ArrayList<>();
我有一个IdGeneratorItemAction
如下所示:
public class IdGeneratorItemAction implements RecursableAction<Item, IdGeneratorContext> {
private IdGeneratorContext context;
@Override
public void act(Item recursable) {
}
}
界面RecursableAction
如下所示:
public interface RecursableAction<R extends Recursable, C extends AbstractContext> {
void act(R recursable);
}
我尝试创建一个实例IdGeneratorItemAction
并将其添加到actions
列表中,如下所示:
RecursableAction<Recursable, AbstractContext> action = new IdGeneratorItemAction();
actions.add(action);
当我尝试这样做时,我收到以下编译错误:
RecursableAction<Recursable, AbstractContext> action = new IdGeneratorItemAction();
^
Type mismatch: cannot convert from IdGeneratorItemAction to RecursableAction<Recursable,AbstractContext>
我试图将声明更改actions
为
List<RecursableAction<? extends Recursable, ? extends AbstractContext>> actions = new ArrayList<>();
但是当我这样做时,我不再能够在actions
.
for (RecursableAction<? extends Recursable, ? extends AbstractContext> action : actions) {
action.act(recursable);
^
The method act(capture#1-of ? extends Recursable) in the type RecursableAction<capture#1-of ? extends Recursable,capture#2-of ? extends AbstractContext> is not applicable for the arguments (Recursable)
}
如何解决这个问题呢?