黑马程序员技术交流社区
标题:
程序报错.....
[打印本页]
作者:
hyz123456
时间:
2013-10-23 17:45
标题:
程序报错.....
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
{
String Y=null ;
Pro(String y)
{
this.Y= y;
}
}
复制代码
哪里出错.. 郁闷...
作者:
周学彬
时间:
2013-10-24 15:49
有两种方法可以修正楼主代码的错误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;
}
}
复制代码
作者:
To
时间:
2013-10-27 16:02
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2