要求使用字符串:“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());
}
}