黑马程序员技术交流社区

标题: 映射里访问权限的问题 [打印本页]

作者: 陆杨    时间: 2011-8-5 10:26
标题: 映射里访问权限的问题
成员变量的反射,视频上的代码我也基本上明白什么意思了:发现一个有趣的地方:
public class Main {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception
        {
                ReflectPoint pt = new ReflectPoint();
                changString(pt);
                System.out.println(pt);
        }
       
        public static void changString (Object obj)throws Exception
        {
                Field[] fields = obj.getClass().getFields();
                for (Field field :fields){
                        if (field.getType()==String.class){
                                String oldString = (String)field.get(obj);
                                String newString = oldString.replace('b', 'a');
                                field.set(obj, newString);
                        }
                }
        }
}这个是主类。
public class ReflectPoint
{
        public  String a = "ball";
        public String b = "basketball";
        public String c = "Six";
        public ReflectPoint()
        {
        }
        @Override
        public String toString() {
                return "ReflectPoint [a=" + a + ", b=" + b + ", c=" + c + "]";
        }
}这个是第二个类。
这样运行时输出的就是  :ReflectPoint [a=aall, b=aasketaall, c=Six]
但是如果第二个类里面String前面的public 都拿掉那么
运行结果: ReflectPoint [a=ball, b=basketball, c=Six]  程序就不修改String了。
接着我百度了下访问权限 :
public          全部可见
protected       子类可见
default         包内可见
private         本类可见
如果成员变量前没有修饰的话应该是default包内可见。而我的两个类是属于同一个包
为什么访问不到?
作者: 匿名    时间: 2011-8-5 17:45
我想大概是因为那个getfields只能得到public修饰的字段吧,你可以用获得所有自段的方法测试下.另外成员字段一般是私有的,开发的时候别这样写哈,老方说,咱都是有经验的开发人员




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