黑马程序员技术交流社区

标题: 请教关于反射的问题! [打印本页]

作者: Tyson    时间: 2014-11-21 18:54
标题: 请教关于反射的问题!

  1. package test;

  2. class ReflectPoint {
  3.        
  4.          public String str1="ball";
  5.          public String str2="baskball";
  6.          public String str3="itheim";
  7. @Override
  8. public String toString() {
  9.         return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3
  10.                         + "]";
  11. }
  12. }
复制代码
  1. public class ReflectTest {

  2.         public static void main(String[] args) throws Exception{
  3.                 // TODO Auto-generated method stub
  4.                
  5.                 ReflectPoint rp=new ReflectPoint();
  6.                 changeVlaue(rp);
  7.                 System.out.println(rp);
  8.         }

  9.         private static void changeVlaue(Object obj)throws Exception {
  10.                 // TODO Auto-generated method stub
  11.                 Field [] fields=obj.getClass().getFields();
  12.                 for (Field field : fields) {
  13.                         if(field.getType()==String.class){
  14.                                 String oldValue=(String)field.get(obj);
  15.                                 String newValue=oldValue.replace('b', 'a');
  16.                                
  17.                                 field.set(obj, newValue);
  18.                         }
  19.                        
  20.                 }
  21.         }
  22.        

  23. }
复制代码
请问各位,这个程序里面的ReflectPoint类中的成员为何一定要加public,不然不能将里面的b替换成a!谢谢!




作者: sk0806    时间: 2014-11-21 19:34
因为不加public,是私有的,无法通过反射获取到私有的属性,可以进行调试,如果去掉public
Field [] fields=obj.getClass().getFields();获得的长度为0,就是没有获取到属性
想要通过反射获取到私有的,必须要通过暴力反射类获取

有错误之处,请大神手下留情,多多指教,自己的见解
作者: Tyson    时间: 2014-11-21 20:00
sk0806 发表于 2014-11-21 19:34
因为不加public,是私有的,无法通过反射获取到私有的属性,可以进行调试,如果去掉public
Field [] fields ...

不加public不应该是默认权限的吗?如果是私有的不应该需要加上private的吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2