想写一个方法,参数为各个类的对象。这个方法想实现通过这个对象获取对象中的属性值。
我写了个,现在可以取属性名,方法名什么的。但是不会取属性值。请帮我看看,谢谢。public void f(Object obj) {
 Class classType = obj.getClass();
 Field fields[] = classType.getDeclaredFields(); 
 for (int i = 0; i < fields.length; i++) {  
  Field field = fields[i];  
  String fieldName = field.getName();  
  System.out.println(fieldName);
 }
}

解决方案 »

  1.   

    invoke方法 Object的 具体的查API
      

  2.   

    Object value = objClass.getMethod(getMethodName).invoke(obj); 取值
    descClass.getMethod(setMethodName, value.getClass()).invoke(desc, value); 设值
    desc 是Class
      

  3.   

    Field类的get(Object obj)就可以获得
      

  4.   

    那我问你 String类型值能取到吗?
      

  5.   


    public static String getPrivate(RFCSource rfc,String fieldName){
    Field[] fields = rfc.getClass().getDeclaredFields();
    for(int i = 0 , len = fields.length; i < len; i++) {
    String varName = fields[i].getName();
    if(varName.equals(fieldName)){
    fields[i].setAccessible(true);
    try {
    Object oj=fields[i].get(rfc);
    String data=oj.toString();
    fields[i].setAccessible(false);
    return data;
    } catch (IllegalArgumentException e) {
    throw new AppException(MsgService.getMsg("nvf_00022"));
    } catch (IllegalAccessException e) {
    throw new AppException(MsgService.getMsg("nvf_00022"));
    }
    }
    }
    return null;
    }
    注意这句
    Object oj=fields[i].get(rfc);
    rfc是你传入的Object的实例
    这样就能取到你给定的对象实例的某个Field的值
      

  6.   

    知道为什么要添加get setter方法吗
    spring实现机制就是你这样的嘛。你就差把属性名拼接成get setter方法然后来通过反射调用方法了LZ你懂的// 获得相应属性的getXXX和setXXX方法名称
    String getName = "get" + stringLetter + fieldName.substring(1);
    System.out.println("getName :" + getName);
    String setName = "set" + stringLetter + fieldName.substring(1);
    System.out.println("setName :" + setName);
    // 获取相应的方法
    Method getMethod = classType.getMethod(getName, new Class[] {});
    Method setMethod = classType.getMethod(setName, new Class[] { field.getType() });
      

  7.   

    如果属性是基本类型用getBoolean, getInt之类,如果是Object 用get, 不一定非得要getter and setter然后再通过反射来获取属性值吧,有点画蛇添足
      

  8.   


    import java.lang.reflect.Field;class Point{
    private int a;
    private int b;
    public Point() {
    super();
    } public Point(int a, int b) {
    super();
    this.a = a;
    this.b = b;
    }
    }public class Test {

    public static void main(String args []) throws IllegalArgumentException, IllegalAccessException{
    Point point=new Point(3,4);
    f(point);
    }

    public static void f(Object obj) throws IllegalArgumentException, IllegalAccessException {
     Class classType = obj.getClass();
     Field fields[] = classType.getDeclaredFields(); 
     for (int i = 0; i < fields.length; i++) {  
      Field field = fields[i];  
      String fieldName = field.getName();  
      System.out.println("第"+i+"个属性名:"+fieldName);
      //获取属性值
      field.setAccessible(true);//因为属性a,b是私有的,要暴力获取,如果属性是共有的,就不要写这句代码
      System.out.println("第"+i+"个属性值:"+field.get(obj));
      
     }
    }}
    //结果
    //第0个属性名:a
    //第0个属性值:3
    //第1个属性名:b
    //第1个属性值:4
      

  9.   

    这些东西只要详细的查看api就可以了
      

  10.   

    fields[i].setAccessible(true);
                    try {
                        Object oj=fields[i].get(rfc);
                        String data=oj.toString();
                        fields[i].setAccessible(false);
                        return data;
      

  11.   

    fields[i].setAccessible(true);这点很重要呀