准备知识:
Java反射机制 处理事务的JavaBean String的操作常用方法
这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值。
首先创建一个简单的User类包含两个属性username和userid以及getter、setter方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class User { public User(){}
private String username; private String userid; public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
|
接下来创建User类的对象user1,然后通过反射机制动态把user1对象的所有属性赋值给新建的user2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| User user1 = new User(); user1.setUsername("arthinking"); user1.setUserid("001"); String username = "arthinking"; String userid = "001";
Class<?> classType = user1.getClass();
Object user2 = classType.getConstructor(new Class[]{}).newInstance(new Object[]{});
Field[] fields = classType.getDeclaredFields(); for(int i=0; i<fields.length; i++){
Field field = fields[i]; String fieldName = field.getName(); String firstChar = fieldName.substring(0,1).toUpperCase(); String getterName = "get" + firstChar + fieldName.substring(1); String setterName = "set" + firstChar + fieldName.substring(1); Method getter = classType.getMethod(getterName); Method setter = classType.getMethod(setterName, new Class[]{field.getType()}); Object result = getter.invoke(user1); setter.invoke(user2, new Object[]{result}); }
|