Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将元素添加到此通用列表?_Java_Generics - Fatal编程技术网

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());
}