【问题标题】:How to make a hashmap of dynamic methods in Java如何在 Java 中制作动态方法的 hashmap
【发布时间】:2018-11-13 03:50:10
【问题描述】:

这是一个有点具体的问题,但我想知道如何制作一个在参数中获得的函数的 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);
}

我该如何正确地做到这一点?

【问题讨论】:

    标签: java function methods parameters hashmap


    【解决方案1】:

    您可以使用Consumer&lt;String&gt;

    首先,将您的 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);
    }
    

    【讨论】:

    • 最好设计面向接口的代码。这样,将属性定义为private Map&lt;String, Consumer&lt;String&gt;&gt; functions = ...
    【解决方案2】:

    所有函数都会接受字符串并返回 void

    在这种情况下,您可以使用Consumer&lt;String&gt; 接口并按如下方式创建工厂:

    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");
    

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2014-12-27
      • 2013-06-25
      • 2019-09-23
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      相关资源
      最近更新 更多