gpt4 book ai didi

java - 从 HashMap 存储和调用方法

转载 作者:行者123 更新时间:2023-12-01 14:17:43 25 4
gpt4 key购买 nike

我有 2 个文件:ImplementationProvider 和 CaseHandler。

实现提供者:

class ImplementationProvider {
public void method1(Object[] params) {}
public void method2(Object[] params) {}
...
public void method100(Object[] params) {}
}

案例处理者:
class CaseHandler {
ImplementationProvider ip; // auto injected
public void handle(String s, String param) {
switch(s) {
case USE_CASE_ONE: ip.method1(param); break;
case USE_CASE_TWO: ip.method2(param); break;
...
}
}
}

如何重构 CaseHandler 以便 USE_CASE 字符串是 HashMap 中的键,其中值将是方法?我遇到的主要问题是参数的传播。这里的其他答案建议使用接口(interface),但是我需要在运行时提供参数。

最佳答案

这是我能想到的一种方法,使用 Consumer功能界面:

Map<String,Consumer<Object[]>> methods = new HashMap<>();

methods.put (USE_CASE_ONE, param -> ip.method1(param));
methods.put (USE_CASE_TWO, param -> ip.method2(param));
...

public void handle(String s, String param) {
methods.get(s).accept(new Object[]{param});
}

编辑:

如果您的方法需要两个参数,您可以使用 BiConsumer界面:
Map<String,BiConsumer<String,List<String>>> methods = new HashMap<>();

methods.put (USE_CASE_ONE, (s,l) -> ip.method1(s,l));
methods.put (USE_CASE_TWO, (s,l) -> ip.method2(s,l));
...

public void handle(String s, String param) {
methods.get(s).accept(someString,someListOfStrings);
}

关于java - 从 HashMap 存储和调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47287222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com