当前位置: 代码迷 >> J2EE >> 关于反射,该如何解决
  详细解决方案

关于反射,该如何解决

热度:72   发布时间:2016-04-22 02:20:51.0
关于反射
实体类Bean:
public class User {
private String userName;
private String password;
private Integer count;

public String getUserName() {return userName;}

public void setUserName(String userName) {this.userName = userName;}

public String getPassword() {return password;}

public void setPassword(String password) {this.password = password;}

public Integer getCount() {return count;}

  public void setCount(Integer count) {this.count = count;}
}
当我实例化一个User时候,通过反射user.getClass().getDeclaredFields();可以得到它的所有属性
问:如何得到这个实例user的所有值呢,因为UserBean是私有属性,无法通过反射的get方法得到



------解决方案--------------------
私有的加get/set..好囧,不过LZ可以看下这个例子
Java code
import java.lang.reflect.Field;import java.lang.reflect.Method;public class ReflectDemo {    public static void main(String[] args) throws Exception {        PrivateTest t = new PrivateTest();        Field field = Class.forName("com.test.PrivateTest").getDeclaredField(                "str");        // 不让Java语言检查访问修饰符        field.setAccessible(true);        field.set(t, "world");        t.getStr();        Method method2 = Class.forName("com.test.PrivateTest")                .getDeclaredMethod("method", new Class[] {});        method2.setAccessible(true);        method2.invoke(t, new Object[] {});    }}class PrivateTest {    private String str = "hello";    public void getStr() {        System.out                .println("I'm str,I'm a private field,my old value is hello,now I am --->"                        + str);    }    private void method() {        System.out.println("I'm in a private method!");    }}--------------结果---------------------I'm str,I'm a private field,my old value is hello,now I am --->worldI'm in a private method!
------解决方案--------------------
楼主的问题不是很明确,如果要有类的实际路径的话就可以根据路径实例化出对象Class.forName("com.test.PrivateTest"),如果要是实例出的对象的属性需要赋值进去,或者用反射的方式获取或赋值,也可以用对象来set或者get,网上也有很多反射的例子,不是很难,看看就能明白了。
------解决方案--------------------
办法1:
public static void addToken(Object obj){
Field[] t = obj.getClass().getDeclaredFields();// 得到属性名部分
for (Field field : t) {
System.out.println(field);
field.setAccessible(true);
field.get(obj);
}
}

办法2:
public static void addToken(Object obj){
Field[] t = obj.getClass().getDeclaredFields();// 得到属性名部分
for (Field field : t) {
System.out.println(field);
[color=#FF0000]
String methodname = "get" + field.getName.substring(0,1).toUpperCase() + field.getName.substring(1);
Object value = obj.getClass().getMethod(methodname).invoke(obj);
color]
}
}
  相关解决方案