例如:
存在3种方法
“map1method,
map2method,
map3mehtod“
我希望根据当前存储在整个'activemap'中的内容来调用正确的。
我可以做一个If语句
“if(activemap == 1)
map1method;
elseif(activemap == 2)
...“
但是有没有可能更有效地使用整数的方法?
类似于“地图(activemap)方法”
我也可以以同样的方式在一批中调用特定的数组。
顺便说一句,这都是在java中。
答案 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,...);