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());这样执行的话会出错,但是我不知道参数在哪里放,请高手指教!!!!
展开
3个回答
展开全部
应该这样定义getDeclaredMethod():getDeclaredMethod(方法名,参数),方法名是一个字符串型的,参数是一个class类型的,
例:getDeclaredMethod("setName",new Class[] {参数类型.class}),有几个参数就写几个.class。
在调用时,用获得的Method的对象来调用invoke方法,
例:Method对象.invoke(你定义类的类对象,new Object[] {参数})。此处传递的参数与上面定义的参数类型相对应
希望能解决你的问题!
例:getDeclaredMethod("setName",new Class[] {参数类型.class}),有几个参数就写几个.class。
在调用时,用获得的Method的对象来调用invoke方法,
例:Method对象.invoke(你定义类的类对象,new Object[] {参数})。此处传递的参数与上面定义的参数类型相对应
希望能解决你的问题!
展开全部
简单给你个例子:
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";
}
}
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";
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是源代码 仔细看
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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询