所以我想实现责任链,但使用泛型,有上限。
public abstract class Handler<C extends Command> {
private Handler<? extends Command> successor;
public Handler(Handler<? extends Command> successor) {
this.successor = successor;
}
public final String handle(C cmd) {
if (canHandle(cmd)) {
return doHandle(cmd);
} else {
// The method doHandle(capture#3-of ? extends Command) in the type Handler<capture#3-of ? extends Command>
// is not applicable for the arguments (C)
return successor.doHandle(cmd);
}
}
protected abstract boolean canHandle(C cmd);
protected abstract String doHandle(C cmd);
}
abstract class Command {
public String getParamBase() {
return "base";
}
}
class CommandTypeOne extends Command {
public String getTypeOneParam() {
return "ParamTypeOne";
}
}
class CommandTypeTwo extends Command {
public String getTypeTwoParam() {
return "ParamTypeTwo";
}
}
当然,我可以拥有非泛型类,并在任何地方都将 Command 作为参数,这样就可以了。但是我不想在 doHandle 方法中使用强制转换来传递给相应的 Command 子类型。我想为每个子类型、泛型都有一个处理程序,然后将它们链接起来。
我得到的问题是:类型处理程序中的方法 doHandle(capture#3-of ? extends Command) 不适用于参数(C)
为什么如果 C 扩展命令?