我有一个泛型方法,它通过类型干扰从输入参数类型(Command< ReturnT>)获取返回类型(ReturnT)。现在我想在输入参数类型中添加一个(上部)绑定,这样它就必须扩展一个作为类类型参数给出的类型参数。
在下面的示例中,我想添加CommandT extends BaseCommandT
之类的内容(CommandT extends Command<ReturnT>
仍然存在)。
我的第一次尝试CommandT extends BaseCommandT&Command<ReturnT>
会导致:
接口Command不能使用不同的参数多次实现:TestGenerics.Command&lt; ReturnT&gt;和TestGenerics.Command&lt;?&gt;
这有可能吗?
interface Command<ReturnT> {}
interface CommandExecutor<CommandT extends Command<ReturnT>,ReturnT>{
ReturnT execute(CommandT cmd);
}
class ExecutorRegistry<BaseCommandT extends Command<?>> {
public <ReturnT, CommandT extends Command<ReturnT>> ReturnT execute(CommandT cmd){
return ((CommandExecutor<Command<ReturnT>,ReturnT>)executors.get(cmd.getClass())).execute(cmd);
}
}
为了完整性,以下字段和方法也是我的ExecutorRegistry类的一部分:
Map<Class<? extends BaseCommandT>,CommandExecutor<?,?>> executors = new HashMap<>();
public void register(Class<? extends BaseCommandT> cls, CommandExecutor<?, ?> executor){
executors.put(cls, executor);
}