java - 如何在不使用 "if-else if"的情况下编写对不同参数使用不同方法的代码?

标签 java design-patterns

对我来说,if-else if 太长而且难以阅读。

是否有一些表驱动的方法可以用来映射输入值以调用该值的特定方法?

例如:

for(String id:ids){

    Test test = new Test();

    if(id == "101") {    
        test.method1();
    }else if(id=="102") {
        test.method2();
    }else if(id=="103"){
        test.method3();
     ...

最佳答案

...
static Map<String,Method> methods = new HashMap<String,Method>();
...
static {
    methods.put("101",Test.class.getMethod("method1",null));
    methods.put("102",Test.class.getMethod("method2",null));
    ...
}
...
for( String id : ids ) {
    Test test = new Test();
    Method m = methods.get(id);
    if (m != null) {
        m.invoke(test,null);
    }
}

当然,所有这一切真正做的是用 if/else 链的痛苦换取使用所有方法初始化散列的痛苦。

关于java - 如何在不使用 "if-else if"的情况下编写对不同参数使用不同方法的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22705062/

相关文章:

java - 尝试格式化字符串时出现 IllegalFormatPrecisionException

c# - 我可以从数据源创建和反对 "self-loads"属性吗?

java - 我需要使用哪种设计模式 Java 应用程序

design-patterns - 哪些设计模式未被充分利用?

javascript将对象方法传递给不同的对象方法

Java 字符编码问题,货币在 JSP 中显示不正确

java - 使用 createBufferStrategy() 的正确方法是什么?

java - 使用JavaFX在Ubuntu下创建.exe文件

java - 为什么这个正则表达式 ".*"与 "abcd 1234 abcd"匹配会给出两个匹配项?

.net - 工厂类属于哪个命名空间?