【问题标题】:call a method with a concatenated string使用连接的字符串调用方法
【发布时间】:2012-03-01 17:17:35
【问题描述】:

在 Java 中我想在 for 循环中调用一个方法

for(int i = 0; i < 5; i++ ){
 myMethod.get + Integer.toString(i)(theValue);
}

其中调用的方法名为 myMethod.get1、myMethod.get2、myMethod.get3 ...

这个可以吗?

【问题讨论】:

  • 可以使用反射 - 但为什么需要这样做?基本要求是什么?您的问题可能有比这更好的解决方案。

标签: java dynamic methods runtime call


【解决方案1】:

我认为这通常不是一个好主意,但您可以使用反射 API:
Class 有一个名为 getMethod 的方法,它接受一个字符串参数、方法的名称(还有一些可选参数参数类型),然后你可以通过调用invoke来调用它。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      原则上,这可以通过反射来实现。但是,像这样的问题通常表明您的程序设计不当。很可能您最好将数据存储在 List 或数组等数据结构中,这样您就可以通过索引或 Map 从中获取值。

      【讨论】:

      • +1:反射不应该是设计糟糕的应用程序的解决方案。
      【解决方案4】:

      是的,您可以为此使用反射 API。查看 java.lang.reflect.Method 类并使用它的调用方法

      【讨论】:

        【解决方案5】:

        像这样封装你的处理逻辑

        interface Worker {
        
            void doWork(Object param);
        }
        
        class Test {
        
            private HashMap<Integer, Worker> map = new HashMap<Integer, Worker>();
        
            public Test() {
                map.put(1, new Worker() {
        
                    @Override
                    public void doWork(Object param) {
                        // do something for 1
                    }
                });
                map.put(2, new Worker() {
        
                    @Override
                    public void doWork(Object param) {
                        // do something for 2 
                    }
                });
        
            }
        
        
            public void invoke(int id, Object param){
                map.get(id).doWork(param);
            }
        }
        

        【讨论】:

          【解决方案6】:

          我认为你不应该使用不同的方法,我相信你正在为某些操作集做这些,你应该为每个功能创建类。所有这些类都应该扩展一个公共类,或者更好地实现一个接口。这个接口可以有一个get()方法,在每个类中都会实现。

          现在您需要创建这些对象的引用数组/列表。并在 for 循环中调用每个类的 get() 方法。

          当然你也可以使用反射。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-02-27
            • 1970-01-01
            • 2016-12-11
            • 1970-01-01
            • 1970-01-01
            • 2012-06-22
            • 2013-09-16
            相关资源
            最近更新 更多