ジェネリックを使用してコマンドパターンのかなり単純な実装を実装しようとしています
public abstract class Command {
}
public interface CommandHandler<H extends Command> {
boolean isActive();
void execute( H command );
}
public class CommandExecutionServiceImpl implements CommandExecutionService {
private Map< Class<Command>,CommandHandler<Command>> commandMap;
public CommandExecutionServiceImpl(){
commandMap = new HashMap<Class<Command>, CommandHandler<Command>>();
}
@Override
public void executeCommand(Command command) {
CommandHandler<Command> handler = commandMap.get(command.getClass());
handler.execute(command);
}
@Override
public boolean isActive(Command command) {
return false;
}
@Override
public <H extends Command> void addCommandHandler(Class<H> commandClass, CommandHandler<H> handler) {
commandMap.put( commandClass, handler );
}
コンパイラは失敗します
コンパイル失敗 CommandExecutionServiceImpl.java:[36,12] put(java.lang.Class,CommandHandler) in java.util.Map,CommandHandler> は適用できません (java.lang.Class,CommandHandler)
コンパイラが commandMap.put( commandClass, handler ); で型を推測できない理由がわかりません。
どんな助けでも大歓迎です。