Java 如何将元素添加到此通用列表?
我有一个声明如下的列表,我打算在其中添加对象Java 如何将元素添加到此通用列表?,java,generics,Java,Generics,我有一个声明如下的列表,我打算在其中添加对象 List<RecursableAction<Recursable, AbstractContext>> actions = new ArrayList<>(); 接口RecursableAction如下所示: public interface RecursableAction<R extends Recursable, C extends AbstractContext> { void act
List<RecursableAction<Recursable, AbstractContext>> actions = new ArrayList<>();
接口RecursableAction
如下所示:
public interface RecursableAction<R extends Recursable, C extends AbstractContext> {
void act(R recursable);
}
当我尝试这样做时,我得到以下编译错误:
RecursableAction<Recursable, AbstractContext> action = new IdGeneratorItemAction();
^
Type mismatch: cannot convert from IdGeneratorItemAction to RecursableAction<Recursable,AbstractContext>
但是当我这样做时,我就不再能够迭代操作了
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)
}
for(RecursableAction在不了解上下文的情况下很难给出建议。显然,您不能将IdGeneratorItemAction
添加到列表中,因为IdGeneratorItemAction
是一个RecursableAction
并且它们不兼容(与您不能将列表
分配给需要列表
的变量的方式相同)。但同样,您也不能对递归操作调用act(recursable)
RecursableAction<Recursable, AbstractContext> action = new IdGeneratorItemAction();
^
Type mismatch: cannot convert from IdGeneratorItemAction to RecursableAction<Recursable,AbstractContext>
List<RecursableAction<? extends Recursable, ? extends AbstractContext>> actions = new ArrayList<>();
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)
}
public static <R extends Recursable> void doStuff(
List<? extends RecursableAction<R, ?>> actions, R recursable) {
for(RecursableAction<R, ?> action : actions) {
action.act(recursable);
}
}
public static void main(String[] args) {
List<RecursableAction<Item, IdGeneratorContext>> actions = new ArrayList<>();
actions.add(new IdGeneratorItemAction());
doStuff(actions, new Item());
}