java代码中,常常将一个类的成员变量置为private
在类的外面获取此类的私有成员变量的value时,需要注意:
测试类:
- publicclassAccessibleTest{
- privateintid;
- privateStringname;
- publicAccessibleTest(){
- }
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- }
Main类:
- publicclassMain{
- publicstaticvoidmain(String[]args)throwsException{
- Classclazz=Class.forName("com.test.accessible.AccessibleTest");
- AccessibleTestat=newAccessibleTest();
- at.setId(1);
- at.setName("AT");
- for(Fieldf:clazz.getDeclaredFields()){
- f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
- System.out.println(f.get(at));//获取当前对象中当前Field的value
- }
- }
- }
如果没有在获取Field之前调用setAccessible(true)方法,异常:
- java.lang.IllegalAccessException:
- Classcom.test.accessible.Main
- cannotaccess
- amemberofclasscom.test.accessible.AccessibleTest
- withmodifiers"private"
当然在AccessibleTest类的内部(AccessibleTest的内部类除外)
进行如上操作则不需要调用setAccesible()方法
java代码中,常常将一个类的成员变量置为private
在类的外面获取此类的私有成员变量的value时,需要注意:
测试类:
- publicclassAccessibleTest{
- privateintid;
- privateStringname;
- publicAccessibleTest(){
- }
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- }
Main类:
- publicclassMain{
- publicstaticvoidmain(String[]args)throwsException{
- Classclazz=Class.forName("com.test.accessible.AccessibleTest");
- AccessibleTestat=newAccessibleTest();
- at.setId(1);
- at.setName("AT");
- for(Fieldf:clazz.getDeclaredFields()){
- f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
- System.out.println(f.get(at));//获取当前对象中当前Field的value
- }
- }
- }
如果没有在获取Field之前调用setAccessible(true)方法,异常:
- java.lang.IllegalAccessException:
- Classcom.test.accessible.Main
- cannotaccess
- amemberofclasscom.test.accessible.AccessibleTest
- withmodifiers"private"
当然在AccessibleTest类的内部(AccessibleTest的内部类除外)
进行如上操作则不需要调用setAccesible()方法