日期:2014-05-17  浏览次数:20739 次

关于JAVA反射的应用
在某方法中我获得一个对象比如说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()这个方法获取这个对象的用户编号了。
java?朱超?宁波?反射?j2ee

------解决方案--------------------
看得不是很明白,如果已经是一个User 对象了,你为啥不能强转之后调用getUid()?
你获得是一个User的对象,还是 User这个类的Class的对象?

------解决方案--------------------
你这里的
clazz == User.class
不是你想要的那个实例对象!
------解决方案--------------------
如果User user已经有了。那么可以这么获得uid的值

//使用字段方式的暴力反射,就算没有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对象上调用此方法

------解决方案--------------------
Class<?>clazz = ABC.getObject();
你确定你的这句话能运行成功?
而不是Object obj = ABC.getObject()?

如果你getObject出来的是个Object,你想打印:((User)obj).getUserUid();!!

下次请保证你给出的代码是正确
------解决方案--------------------

//获取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);
}

------解决方案--------------------
反射得到的一般都是object对象~~~都是需要自己根据业务需要进行特定的强转的吧
------解决方案--------------------
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;
}
}