有两种方法可以修正楼主代码的错误1,getField()方法需要参数所指的变量有public权限,而楼主的代码变量Y没有权限修饰符,这种权限要低于public,所以第一种改法只要在Pro类里给Y添加一个String修饰符就可以了- import java.lang.reflect.*;
- class testOne
- {
- public static void main(String[] args) throws Exception
- {
- Pro obj = new Pro("lisi");
- Field fieldY = obj.getClass().getField("Y");
- System.out.println(fieldY.get(obj));
- }
- }
- class Pro
- {
- public String Y=null ;
- Pro(String y)
- {
- this.Y= y;
- }
- }
复制代码
2,如果不添加修饰符的话,可以用暴力反射的方法,强制获得该变量,就需要用getDeclaredField()方法,然后添加一个setAccessible()语句就行了。- import java.lang.reflect.*;
- class testOne
- {
- public static void main(String[] args) throws Exception
- {
- Pro obj = new Pro("lisi");
- Field fieldY = obj.getClass().getDeclaredField("Y");
- fieldY.setAccessible(true);
- System.out.println(fieldY.get(obj));
- }
- }
- class Pro
- {
- String Y=null ;
- Pro(String y)
- {
- this.Y= y;
- }
- }
复制代码 |