要求使用字符串:“student.name:yuisama|student.age:30”创建实例化对象
Student
package cn.VO; public class Student { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } }
StudAction
package cn.VO; import cn.util.BeanOperation; public class StudAction { private Student student = new Student(); public void setValue(String value)throws Exception { BeanOperation.setBeanValue(this,value); } public Student getStudent() { return student; } }
BeanOperation
package cn.util; import java.lang.reflect.Field; import java.lang.reflect.Method; public class BeanOperation { private BeanOperation() {} public static void setBeanValue(Object actObj, String msg) throws Exception{ String[] result = msg.split("\\|"); for(int i=0;i<result.length;i++) { String[] tmp = result[i].split(":"); String value = tmp[1]; String[] tmp2 = tmp[0].split("\\."); String className = tmp2[0]; String attribute = tmp2[1]; Object curObj = getCurrentObject(actObj,className); setObjectValue(curObj, attribute, value); } } private static void setObjectValue(Object curObj, String attribute, String value) throws Exception { Class<?> class1 = curObj.getClass(); Field vField = class1.getDeclaredField(attribute); Method method = class1.getMethod("set"+initCap(attribute), vField.getType()); method.invoke(curObj, value); } private static Object getCurrentObject(Object actObj, String className)throws Exception { Class<?> actCls = actObj.getClass(); if(actCls.getDeclaredField(className)!=null) { Method getMethod= actCls.getDeclaredMethod("get"+initCap(className)); return getMethod.invoke(actObj); } return null; } public static String initCap(String str) { return str.substring(0, 1).toUpperCase()+str.substring(1); } }
Test
package cn.VO; public class Test { public static void main(String[] args) throws Exception { StudAction sAction =new StudAction(); sAction.setValue("student.name:yuisama|student.age:30"); System.out.println(sAction.getStudent()); } }