Как сделать хэш-карту динамических методов в Java - PullRequest
0 голосов
/ 03 июня 2018

Это немного конкретный вопрос, но я хочу знать, как создать HashMap из функций, которые получаются в параметрах, например:

//All functions will take in string and return void
public HashMap<String,Function> functions = new HashMap<String,Function>();
public void addMethod(String name, Function func){
   functions.put(name, func);
}
public void useMethod(String name, String input){
   functions[name](input);
}

Как бы я сделал это правильно?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Все функции будут принимать строку и возвращать void

В этой ситуации вы можете использовать интерфейс Consumer<String> и создать фабрику следующим образом:

public class ConsumerFactory {

    private static final Map<String, Consumer<String>> consumers = new HashMap<>();

    public static Consumer<String> getConsumer(String key) {
        if (key != null && consumers.containsKey(key)) {
            return consumers.get(key);
        }
        throw new NoSuchElementException(key);
    }

    public static Consumer<String> addConsumer(String key, Consumer<String> value) {
        return consumers.put(key, value);
    }
}

ConsumerFactory.addConsumer("print", System.out::println);
ConsumerFactory.getConsumer("print").accept("Hello");
0 голосов
/ 03 июня 2018

Вы можете использовать Consumer<String>.

Сначала измените ваш HashMap на:

public HashMap<String,Consumer<String>> functions = new HashMap<>();

, затем ваш addMethod на:

public void addMethod(String name, Consumer<String> func){
    functions.put(name, func);
}

, затемВы useMethod до:

public void useMethod(String name, String input){
    functions.get(name).accept(input);
}
...