日期:2014-05-17 浏览次数:20739 次
在某方法中我获得一个对象比如说USER用户对象,属性有uid以及get set方法。
Class<?>clazz = ABC.getObject();
System.out.println(clazz);//打印是 cn.com.xxx.User@ABCDEF
//看到这里我已经知道clazz类型是cn.com.xxx.User了。
//但是我目前不能用clazz.getUid()获取到用户对象的编号。
//请问反射里有什么办法可以将class这个对象转化成User对象呢?
//如果可以那我就可以用USER对象.getUid()这个方法获取这个对象的用户编号了。
//使用字段方式的暴力反射,就算没有get方法一样能获取
Field field=User.class.getDeclaredField("uid");
field.setAccessible(true);//强制可访问
Object value=field.get(user);//在user对象上获得此属性的值
//使用它的get方法来获得值
Method method=User.class.getMethod("getUid");
Object value=method.invoke(user);//在user对象上调用此方法
//获取User的字段
Field[] fields = user.getClass().getDeclaredFields();
for(int i=0; i<fields.length; i++){
//获取字段名
String fieldName = fields[i].getName();
//获取类型
Class<?> parameterType = field.getType();
//构建方法名
String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
String setMethodName = "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
//获取方法
Method getMethod = user.getClass().getMethod(getMethodName);
Method setMethod = user.getClass().getMethod(setMethodName,parameterType);
}
public class Test {
public static void main(String[] args) throws Exception{
Class clazz = User.class;
//无参构造方法
User u = (User)clazz.newInstance();
System.out.println(u.getUid());
//传参构造方法
Constructor con = clazz.getConstructor(String.class);
User u1 = (User)con.newInstance("abcd");
System.out.println(u1.getUid());
}
}
class User{
private String uid;
public User(){}
public User(String uid){
this.uid = uid;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}