java 类的反射机制调用代参方法

一个User(id,name)他有getset方法。我现在用的是类的反射机制,就是调用比如我现在通过forName该类获取到clazz然后我现在clazz.getDecl... 一个User(id,name) 他有get set 方法。我现在用的是类的反射机制,就是调用比如我现在通过forName该类获取到clazz然后我现在clazz.getDeclaredMethod("getName").invoke(      clazz.newInstance());这句是可以的。这是没有参数的方法。但是我的意思就是我想调用setName方法clazz.getDeclaredMethod("setName").invoke(      clazz.newInstance());这样执行的话会出错,但是我不知道参数在哪里放,请高手指教!!!!  展开
 我来答
storm_cloud
推荐于2017-12-15 · 超过24用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:61.1万
展开全部
应该这样定义getDeclaredMethod():getDeclaredMethod(方法名,参数),方法名是一个字符串型的,参数是一个class类型的,
例:getDeclaredMethod("setName",new Class[] {参数类型.class}),有几个参数就写几个.class。
在调用时,用获得的Method的对象来调用invoke方法,
例:Method对象.invoke(你定义类的类对象,new Object[] {参数})。此处传递的参数与上面定义的参数类型相对应

希望能解决你的问题!
man0306
推荐于2018-05-10 · TA获得超过958个赞
知道小有建树答主
回答量:707
采纳率:33%
帮助的人:400万
展开全部
简单给你个例子:
import java.lang.reflect.Method;

public class CallMethod {
public static void main(String[] args) {
CallMethod call=new CallMethod();
try {
Method method=CallMethod.class.getMethod("sunvins",(Class[])null);
method.invoke(call, (Object[])null);
Method method1=CallMethod.class.getMethod("sunvins1",String.class,int.class);
method1.invoke(call, "smile",7);
Method method2=CallMethod.class.getMethod("sunvins2",(Class[])null);
String s=(String)method2.invoke(call, (Object[])null);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 无参无返回值
*/
public void sunvins(){
System.out.println("---haha");
}
/**
* 带参数
* @param s
* @param i
*/
public void sunvins1(String s,int i){
System.out.println("--s="+s);
System.out.println("--i="+i);
}
/**
* 带返回值的
* @return
*/
public String sunvins2(){
return "well";
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-10-16 · TA获得超过1243个赞
知道小有建树答主
回答量:2126
采纳率:55%
帮助的人:673万
展开全部
这个是源代码 仔细看
public Object invoke(Object obj, Object... args)
throws IllegalAccessException, IllegalArgumentException,
InvocationTargetException
{
if (!override) {
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
Class caller = Reflection.getCallerClass(1);
Class targetClass = ((obj == null || !Modifier.isProtected(modifiers))
? clazz
: obj.getClass());

boolean cached;
synchronized (this) {
cached = (securityCheckCache == caller)
&& (securityCheckTargetClassCache == targetClass);
}
if (!cached) {
Reflection.ensureMemberAccess(caller, clazz, obj, modifiers);
synchronized (this) {
securityCheckCache = caller;
securityCheckTargetClassCache = targetClass;
}
}
}
}
if (methodAccessor == null) acquireMethodAccessor();
return methodAccessor.invoke(obj, args);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式