Улучшения шаблона командной строки - PullRequest
0 голосов
/ 16 февраля 2020

В настоящее время я использую следующий шаблон командной строки.

  • Я подумал, что код мог бы быть лучше, если бы вместо типа Class<? extends Command>> использовался просто Command. Однако я не уверен, как настроить последнюю часть кода. command = model.newInstance();
  • Есть ли в этом коде что-нибудь, что можно улучшить?
    private static final Map<Pattern, Class<? extends Command>> COMMAND_PACKAGE
            = new HashMap<Pattern, Class<? extends Command>>() {
        {
            put(SampleCommand.getDefaultPattern(), SampleCommand.class);
            ...
        }
    };

    private static Class<? extends Command> getFromDefaultPackage(final String input) {
        // This lambda searches for the first entry in the hash map that has a regex pattern that matches the input.
        // If none was found it returns null.
        // This kind of kills me all advantages of a hash map when it comes to speed.
        return COMMAND_PACKAGE.keySet()
                .stream()
                .filter(s -> s.matcher(input).matches())
                .findFirst()
                .map(COMMAND_PACKAGE::get)
                .orElse(null);
    }

    ...

    final Command command;
    Class<? extends Command> model = getFromDefaultPackage(input);
    try {
        command = model.newInstance();
    } catch (InstantiationException | IllegalAccessException e) {
        // This should never happen – when this code is reached the program terminates.
        throw new AssertionError("The commands are implemented incorrectly. This is a bug.");
    }

...