package org.lxh.demo.classdemo05;import java.lang.reflect.Method;public class InvokeMethodDemo04 { public static void main(String[] args) throws Exception {
Class<?> c = Class.forName("org.lxh.demo.classdemo05.Person");
Object o = c.newInstance() ;
set("name","MLDN") ;
set("age",30) ; // 这个地方有错误 ,难道反射的时候不通自动的装箱吗?
get("name",o) ;
get("age",o) ;
}
/**
*
* @param name 属性名称
* @param value 属性值
* @param obj 要操作的对象
*/
public static void set(String name, Object value, Object obj)
throws Exception {
Method met = obj.getClass().getMethod("set" + initStr(name),
value.getClass());
met.invoke(obj, value); // 调用方法
}
public static void get(String name, Object obj) throws Exception {
Method met = obj.getClass().getMethod("get" + initStr(name));
Object value = met.invoke(obj);
System.out.println(value);
}
public static String initStr(String name) {
StringBuffer buf = new StringBuffer();
buf.append(name.substring(0, 1).toUpperCase())
.append(name.substring(1));
return buf.toString();
}
}
我传int类型的时候给我报错.
ReflectDemo.invokDemo.Person.setAge(java.lang.Integer)
难道反射的时候int不能自动装箱成Integer吗.
Class<?> c = Class.forName("org.lxh.demo.classdemo05.Person");
Object o = c.newInstance() ;
set("name","MLDN") ;
set("age",30) ; // 这个地方有错误 ,难道反射的时候不通自动的装箱吗?
get("name",o) ;
get("age",o) ;
}
/**
*
* @param name 属性名称
* @param value 属性值
* @param obj 要操作的对象
*/
public static void set(String name, Object value, Object obj)
throws Exception {
Method met = obj.getClass().getMethod("set" + initStr(name),
value.getClass());
met.invoke(obj, value); // 调用方法
}
public static void get(String name, Object obj) throws Exception {
Method met = obj.getClass().getMethod("get" + initStr(name));
Object value = met.invoke(obj);
System.out.println(value);
}
public static String initStr(String name) {
StringBuffer buf = new StringBuffer();
buf.append(name.substring(0, 1).toUpperCase())
.append(name.substring(1));
return buf.toString();
}
}
我传int类型的时候给我报错.
ReflectDemo.invokDemo.Person.setAge(java.lang.Integer)
难道反射的时候int不能自动装箱成Integer吗.
解决方案 »
- erorr:void is a invalid type for the variable drawTank
- 关于程序执行
- java打开word报错了怎么办啊?
- ArrayIndexOutOfBoundsException的问题
- 一个小程序,解决立即结分!!
- eclipse在mdk9.2下的运行
- 请问高手:如何通过局域网的IP地址获得该IP的用户名?
- 如何对邮件进行统计
- 新手问题:关于new的问题?
- 为什么这样不能在ie5.5里面看结果!s说要我下载java虚拟机!我该如何处理阿!!
- static class Builder的static不能少,这是为什么?
- 请大家帮我看一下这个代码哪里有问题,谢谢
楼主的编译错误根本不是 不能自动装箱,而是你调用set方法的参数不正确,你仔细看下eclipse里面的提示,set声明需要三个参数调用public static void set(String name, Object value, Object obj)
而你调用的时候却是两个,这能不出错么?
set("name","MLDN") ;
set("age",30) ;
* @author wangweifeng 此实例主要演示反射机制
*
*/public class InvokeMethodDemo {
public static void main(String[] args) throws Exception {
Class<?> c = Class.forName("com.iss.invoke.Modle");
Object o = c.newInstance();
setString("Name", "MLDN", o);
setInt("age", 30, o);
get("name", o);
get("age", o);
} /**
* @param name
* 属性名称
* @param value
* 属性值
* @param obj
* 要操作的对象
*/
public static void setString(String name, Object value, Object obj)
throws Exception { Class[] parameterTypes = new Class[1];
parameterTypes[0] = String.class;
// parameterTypes[1]=int.class;
Method method = (Method) obj.getClass().getMethod(
"set" + initStr(name), parameterTypes);
method.invoke(obj, value);
} /**
* @param name
* 属性名称
* @param value
* 属性值
* @param obj
* 要操作的对象
*/
public static void setInt(String name, Object value, Object obj)
throws Exception { Class[] parameterTypes = new Class[1];
parameterTypes[0] = int.class;
// parameterTypes[1]=int.class;
Method method = (Method) obj.getClass().getMethod(
"set" + initStr(name), parameterTypes);
method.invoke(obj, value);
} /**
* @param name
* 属性名称
* @param obj
* 要操作的对象
*/
public static void get(String name, Object obj) throws Exception { Method met = obj.getClass().getMethod("get" + initStr(name));
Object value = met.invoke(obj);
System.out.println(value);
} public static String initStr(String name) {
StringBuffer buf = new StringBuffer();
buf.append(name.substring(0, 1).toUpperCase())
.append(name.substring(1));
return buf.toString();
}}
"set" + initStr(name), parameterTypes);
需要一个参数类型说明
这是三个参数
你调的时候怎么才两个
setInt("age", 30, o);
拜托,麻烦自己将代码拷下去debug下。