让泛型方法类型参数由类类型参数绑定(两种泛型类型)

时间:2015-10-19 21:36:45

标签: java generics

我有一个泛型方法,它通过类型干扰从输入参数类型(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);
}    

0 个答案:

没有答案