如何在Java中创建动态方法的hashmap

如何在Java中创建动态方法的hashmap,java,function,methods,parameters,hashmap,Java,Function,Methods,Parameters,Hashmap,这是一个有点特殊的问题,但我想知道如何制作在参数中获得的函数的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.p

这是一个有点特殊的问题,但我想知道如何制作在参数中获得的函数的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);
}
//所有函数都将接受字符串并返回void
public HashMap functions=new HashMap();
public void addMethod(字符串名称,函数func){
functions.put(名称,func);
}
public void useMethod(字符串名称、字符串输入){
函数[名称](输入);
}

如何正确执行此操作?

您可以使用
消费者

首先,将HashMap更改为:

public HashMap<String,Consumer<String>> functions = new HashMap<>();
然后您可以
使用method
来:

public void addMethod(String name, Consumer<String> func){
    functions.put(name, func);
}
public void useMethod(String name, String input){
    functions.get(name).accept(input);
}
所有函数都将接受字符串并返回void

在这种情况下,您可以使用
消费者
界面创建工厂,如下所示:

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");
公共类消费者工厂{
私有静态最终映射使用者=新HashMap();
公共静态使用者getConsumer(字符串键){
if(key!=null&&consumers.containsKey(key)){
返回消费者。获取(键);
}
抛出新的NoTouchElementException(键);
}
公共静态使用者addConsumer(字符串键、使用者值){
返回消费者。put(键、值);
}
}
addConsumer(“打印”,System.out::println);
ConsumerFactory.getConsumer(“打印”).accept(“你好”);

最好设计面向接口的代码。这样,将属性定义为
私有映射函数=…