手记

Java:封装其实也有口子,反射的操作

  • 类似于中国网络有堵墙一样,封装就好比那堵墙,但是反射中的一个方法,就是那个凿洞的锤子:titleField.setAccessible(true);

证明:实例化对象增加了一个新的方法-----反射:

package cn.dujiang.demo;

import java.lang.reflect.Field;
/**
 * public class TestDemo {
    public static void main(String[] args) throws Exception {
        Class<?> cls = Class.forName("cn.dujiang.next.Food") ;
        Object obj = cls.newInstance();//必须给出实例化对象
        Field titleField = cls.getDeclaredField("title") ;
        titleField.set(obj,"鱼香肉丝"); //相当于,Food类对象.title = "鱼香肉丝";
        System.out.println(titleField.get(obj));//相当于,Food类对象.title
    }
}
以上程序会报错。但是可以解决  titleField.setAccessible(true);//封装取消了
 * @author Dujiang
 *
 */
public class TestDemo {
    public static void main(String[] args) throws Exception {
        Class<?> cls = Class.forName("cn.dujiang.next.Food") ;
        Object obj = cls.newInstance();//必须给出实例化对象
        Field titleField = cls.getDeclaredField("title") ;
        titleField.setAccessible(true);//封装取消了
        titleField.set(obj,"鱼香肉丝"); //相当于,Food类对象.title = "鱼香肉丝";
        System.out.println(titleField.get(obj));//相当于,Food类对象.title
    }
}
很多人都和我说过,千万不要用汉化版的Eclipse等编程工具,你可能看到有的教学视频中用汉化版,很强,你也想试试,其实这完全是在给自己挖坑,不适合开发的,建议所有人,本着国际化原则,用最新英文原版的eclipse
9人推荐
随时随地看视频
慕课网APP