【发布时间】:2013-01-03 22:40:54
【问题描述】:
可能重复:
How do I invoke a java method when given the method name as a string?
**我看过这个:Call a function from a string array (Java or Groovy),但它对我不起作用,也许这是我的场景*
我有一个带有一些值的字符串数组,我希望能够调用一个方法,它是这些值之一,当然这可以改变,我可能有 100 个值,所以使用它是不可行的if/else if 构造或 switch 语句。
有什么方法可以调用该方法,如我所愿,如下面的代码所示?
private String[] = {"Hit","Slap","Blop"};
private String et = "Slap";
public void Action(){
for(int i = 0; i < arr.length;i++){
if(et.equals(arr[i])){
//Call method of that name ( Slap(); )
}
}
}
public void Run(){
///
}
public void Slap(){
///
}
public void Blop(){
///
}
编辑:我尝试整合反射:
for(int i = 0; i < arr.length;i++){
if(et.equals(arr[i])){
//Call method of that name
try {
method = this.getClass().getMethod(arr[i]);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
return (String) method.invoke(this);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return "FAIL";
【问题讨论】:
-
为什么反射不起作用?
-
您对反射进行了哪些尝试?实际告诉我们你累了什么,而不是在明确的反思有效时说它不起作用,这会很有帮助。
-
如果你调用的是
et标识的方法,为什么还要在数组中查找呢? -
第一条评论中接受的答案会起作用。在您的情况下,您可以将他们使用“obj”的位置更改为“this”,因为您的方法在当前类中。
-
如果方法对象为空,则不能调用它。它不返回任何值,因此不要强制转换并返回结果。将您的 getMethod 和调用放在一个 try 块中...
标签: java arrays reflection methods invoke