【问题标题】:Get private field values using Reflection API java使用反射 API java 获取私有字段值
【发布时间】:2014-04-13 10:55:07
【问题描述】:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
import java.util.ArrayList;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

public class MongoTest {

    /**
     * @param args
     * @throws UnknownHostException 
     * @throws ClassNotFoundException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    public static void main(String[] args) throws UnknownHostException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException {
        Employee employee= new Employee();
        employee.setFirstname("Durga Dutt");
        employee.setLastname("Pandey");
        employee.setAge(28);
        employee.setSalary(100035);

        Class<?> cl= Class.forName("Employee");
        Field[] fields= cl.getDeclaredFields();

        for(int i=0;i<fields.length;i++)
        {
            System.out.println(fields[i].get(employee));
        }

    }

}

以上程序正在返回公共字段的值,但不适用于私有成员。我已经在我的 POJO 类中声明了 getter 和 setter。

有什么想法吗?

【问题讨论】:

  • 好的,我明白了。这是诀窍:fields[i].setAccessible(true);

标签: java


【解决方案1】:

要获取私有字段的值,您应该使用 setAccessible 将其设置为可访问。

getDeclaredFields 将允许您查看私有字段的名称,而不是值。

【讨论】:

  • +1,但在使用该字段后,您应该使用field.setAccessible(false)(或通常:field.setAccessible(statusThatWasQueriedBefore))将其设置回原来的可访问状态。
猜你喜欢
  • 2013-02-25
  • 2021-12-07
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多