网站开发安全需求,网站开发建设类合同,wordpress主机搭建,宁波网站优化公司软件问题#xff1a; Java中获得了方法名称的字符串#xff0c;怎么样调用该方法
如果我有以下两个变量
Object obj;
String methodName getName;在不知道obj的类的情况下#xff0c;我怎么样才能调用该类的名叫methodName的方法呢#xff1f;
这个方法被调用时…问题 Java中获得了方法名称的字符串怎么样调用该方法
如果我有以下两个变量
Object obj;
String methodName getName;在不知道obj的类的情况下我怎么样才能调用该类的名叫methodName的方法呢
这个方法被调用时不带参数并且返回的是一个字符串这是一个Javabean的getter方法
回答一
java.lang.reflect.Method method;
try {method obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) { ... }catch (NoSuchMethodException e) { ... }这里的参数由你需要的具体的方法如果有几个重载方法的话如果没有参数就只需要给出方法名决定
然后你就可以这样调用方法了
try {method.invoke(obj, arg1, arg2,...);
} catch (IllegalArgumentException e) { ... }catch (IllegalAccessException e) { ... }catch (InvocationTargetException e) { ... }再次声明如果你这个方法没有参数就忽略arg1arg2.
回答二
通过反射实现方法的调用
Class? c Class.forName(class name);
Method method c.getDeclaredMethod(method name, parameterTypes);
method.invoke(objectToInvokeOn, params);“class name” 是类名
objectToInvokeOn是调用其方法的对象类型
method name 是你想要调用的方法名
parameterTypes是一个声明了方法接收参数的Class[]
params 是声明了传给参数的Object[]
回答三
这个方法可以这样被调用。可能会有更多的选择查一下反射的APi吧但是这个是最简单的
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;import org.junit.Assert;
import org.junit.Test;public class ReflectionTest {private String methodName length;private String valueObject Some object;Testpublic void testGetMethod() throws SecurityException, NoSuchMethodException, IllegalArgumentException,IllegalAccessException, InvocationTargetException {Method m valueObject.getClass().getMethod(methodName, new Class[] {});Object ret m.invoke(valueObject, new Object[] {});Assert.assertEquals(11, ret);}}回答四
首先请避免这种代码的的顺序。它真的是很差的并且也不安全。请看第二版的Secure Coding Guidelines for the Java Programming Language的第六节
文章翻译自Stack Overflowhttps://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method-when-given-the-method-name-as-a-string