2014-04-13 55 views
0
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。使用反射API獲取私有字段值java

任何想法?

+1

好的,我明白了。這裏有個技巧:fields [i] .setAccessible(true); –

回答

3

要獲得私人領域的價值,您應該將其設置爲可以使用setAccessible

getDeclaredFields將允許您查看私有字段的名稱,而不是值。

+0

+1,但是在使用該字段後,應該用'field.setAccessible(false)'(或者一般地說:'field.setAccessible(statusThatWasQueriedBefore)')將其設置回原始的可訪問性狀態。 – Marco13

相關問題