最容易解释我的问题的是一个例子。 我有一个编译问题:
The method setOptions(ArgBuilder<Option<? extends Command>>)
in the type Command is not applicable for the arguments (ArgBuilder<Option<T>>)
但是T被宣布为扩展Command的泛型,所以我不明白为什么这不起作用。
可以使用下面的4个类复制此编译问题,编译问题将出现在我Steps
行粘贴的c.setOptions(options);
类中。
我想知道是否有办法解决此编译错误。
package xyz.com;
import java.lang.reflect.Constructor;
public class Main {
public abstract class Option<T extends Command>{}
public abstract class Command{
protected ArgBuilder<Option<? extends Command>> options;
void setOptions(ArgBuilder<Option<? extends Command>> options){
this.options = options;
}
}
public class ArgBuilder<T extends Option<? extends Command>>{}
public class Steps<T extends Command>{
protected Class<T> newCommandClass;
protected ArgBuilder<Option<T>> options;
public Command build(){
try {
Constructor<T> ctor = newCommandClass.getConstructor();
Command c = ctor.newInstance();
c.setOptions(options);
return c;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
}