0

例如:

存在3种方法

“map1方法,

map2方法,

map3mehtod"

我想根据整数“activemap”当前存储在其中的内容来调用正确的。

我可以做一个 If 语句

“如果(活动映射 == 1)

map1 方法;

elseif (activemap ==2)

……”

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

像“地图(活动地图)方法”

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

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

4

4 回答 4

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);
于 2013-09-15T14:58:14.917 回答
0

switch 语句会更容易阅读:

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

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

于 2013-09-15T14:58:36.747 回答
0

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

于 2013-09-15T14:59:02.300 回答
0

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

  java.lang.reflect.Method method;

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

  method.invoke(object, arg1, arg2,...);
于 2013-09-15T15:12:21.663 回答