是否可以使用Integer动态调用方法和数组?

时间:2013-09-15 14:54:57

标签: java integer

例如:

存在3种方法

“map1method,

map2method,

map3mehtod“

我希望根据当前存储在整个'activemap'中的内容来调用正确的。

我可以做一个If语句

“if(activemap == 1)

map1method;

elseif(activemap == 2)

...“

但是有没有可能更有效地使用整数的方法?

类似于“地图(activemap)方法”

我也可以以同样的方式在一批中调用特定的数组。

顺便说一句,这都是在java中。

4 个答案:

答案 0 :(得分:3)

有可能通过反思,但我会敦促你远离这种方法。为什么不将所有三种方法合二为一?一种选择是使用switch语句来处理各种情况:

void mapMethod(int activemap) {
    switch (activemap) {
    case 1:
        // map1method
        break;
    case 2:
        // map2method
        break;
    case 3:
        // map3method
        break;
     default:
        break;
    }
}

现在,您可以致电

mapMethod(activemap)

如果你想采用反思方法(正如我所说,我认为你不应该这样做),你可以按照

的方式做点什么。
String methodName = "map" + activemap + "method";
MyClass.class.getDeclaredMethod(methodName).invoke(null);

答案 1 :(得分:0)

一个switch语句会更容易阅读:

switch(activemap) {
   case 1:  map1method(); break;
   case 2:  map2method(); break;
}

您可以使用反射在运行时构建方法名称,但这不会更简单。反思是很多代码。

答案 2 :(得分:0)

执行此操作的最有效方法是创建enum来表示不同的调用,并使用int作为查找枚举值,或者如果不可能,则使用switch声明。您可以使用反射来完成您正在谈论的内容(在运行时根据其名称查找方法),但它的效率低于其中任何一个选项的麻烦。

答案 3 :(得分:0)

你可以使用Reflection来实现,它将是这样的:

  java.lang.reflect.Method method;

  method = myObject.getClass().getMethod("map+"activemap"+method", param1.class, param2.class, ..);

  method.invoke(object, arg1, arg2,...);