参考网址:http://www.cnblogs.com/muke-steven/p/5523650.html
Demo下载地址:http://pan.baidu.com/s/1sltyWUT(里面将set和get方法都进行了使用)
核心代码
/**
* 方法描述:直接将里面的属性进行赋值
* @param object
* @throws Exception
* @return void
* @throws BusinessException
*/
public static void setObjectValue(Object javaBean) throws Exception {
// 我们项目的所有实体类都继承BaseDomain (所有实体基类:该类只是串行化一下)
// 不需要的自己去掉即可
if (javaBean != null && javaBean instanceof User) {// if (object!=null )
// 拿到该类
Class> clazz = javaBean.getClass();
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
field.setAccessible(true); // 设置些属性是可以访问的
Object val = field.get(javaBean);// 得到此属性的值
System.out.println("name:" + field.getName() + "\t value = " + val);
String type = field.getType().toString();// 得到此属性的类型
if (type.endsWith("String")) {
System.out.println(field.getType() + "\t是String");
field.set(javaBean, "12"); // 给属性设值
} else if (type.endsWith("int") || type.endsWith("Integer")) {
System.out.println(field.getType() + "\t是int");
field.set(javaBean, 12); // 给属性设值
} else {
System.out.println(field.getType() + "\t");
}
}
}
}
/**
* 方法描述:将里面的值全部打印出来
* @param object
* @throws Exception
* @return void
* @throws BusinessException
*/
public static void getObjectValue(Object javaBean) throws Exception {
// 我们项目的所有实体类都继承BaseDomain (所有实体基类:该类只是串行化一下)
// 不需要的自己去掉即可
if (javaBean != null && javaBean instanceof User) {// if (object!=null )
// 拿到该类
Class> clazz = javaBean.getClass();
// 获取实体类的所有属性,返回Field数组
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {// --for() begin
System.out.println(field.getGenericType());// 打印该类的所有属性类型
System.out.println("属性名:"+field.getName());
// 如果类型是String
if (field.getGenericType().toString().equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class
// ",后面跟类名
// 拿到该属性的gettet方法
Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
String val = (String) m.invoke(javaBean);// 调用getter方法获取属性值
if (val != null) {
System.out.println("String type:" + val);
}
}
// 如果类型是Integer
if (field.getGenericType().toString().equals("class java.lang.Integer")) {
Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
Integer val = (Integer) m.invoke(javaBean);
if (val != null) {
System.out.println("Integer type:" + val);
}
}
// 如果类型是Double
if (field.getGenericType().toString().equals("class java.lang.Double")) {
Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
Double val = (Double) m.invoke(javaBean);
if (val != null) {
System.out.println("Double type:" + val);
}
}
// 如果类型是Boolean 是封装类
if (field.getGenericType().toString().equals("class java.lang.Boolean")) {
Method m = (Method) javaBean.getClass().getMethod(field.getName());
Boolean val = (Boolean) m.invoke(javaBean);
if (val != null) {
System.out.println("Boolean type:" + val);
}
}
// 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
// 反射找不到getter的具体名
if (field.getGenericType().toString().equals("boolean")) {
Method m = (Method) javaBean.getClass().getMethod(field.getName());
Boolean val = (Boolean) m.invoke(javaBean);
if (val != null) {
System.out.println("boolean type:" + val);
}
}
// 如果类型是Date
if (field.getGenericType().toString().equals("class java.util.Date")) {
Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
Date val = (Date) m.invoke(javaBean);
if (val != null) {
System.out.println("Date type:" + val);
}
}
// 如果类型是Short
if (field.getGenericType().toString().equals("class java.lang.Short")) {
Method m = (Method) javaBean.getClass().getMethod("get" + getMethodName(field.getName()));
Short val = (Short) m.invoke(javaBean);
if (val != null) {
System.out.println("Short type:" + val);
}
}
// 如果还需要其他的类型请自己做扩展
} // for() --end
} // if (object!=null ) ----end
}
// 把一个字符串的第一个字母大写、效率是最高的、
private static String getMethodName(String fildeName) throws Exception {
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}
调用方法
User user = new User("小明", "123456", 15, true);
//1.set方法
ReflectUtils.setObjectValue(user);
//2.get方法
ReflectUtils.getObjectValue(user);