使用连接字符串调用方法

时间:2012-02-09 08:20:22

标签: java dynamic methods runtime call

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

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

调用的方法名为myMethod.get1,myMethod.get2,myMethod.get3 ...

可以这样做吗?

6 个答案:

答案 0 :(得分:6)

原则上,这可以通过反思实现。但是,像这样的问题通常是您的程序设计糟糕的症状。最有可能的做法是将数据存储在数据结构中,例如List或数组,这样可以通过索引或Map来获取值。

答案 1 :(得分:1)

像这样封装你的处理逻辑

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

答案 4 :(得分:0)

是的,您可以使用反射API。请参阅java.lang.reflect.Method类并使用其调用方法

答案 5 :(得分:0)

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

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

当然你可以使用反射。