这面试真的是够打击我的了,那个经理问我两个问题,我没答出来就直接把简历还我让我回去了
问题有两个:
1.在不改变一个类的封装性的情况下,给这个类动态添加一个新的字段 前提是不能建新的类或者继承
我是怎么也想不出来,后来回来查了一下,有人说反射可以实现,应该不可以,反射只是可以改变属性的值,不能动态添加属性,后来查了一下,使用cglib javaasssist asm等可以实现(郁闷的是他说着已经是java里面最基础的东西了)。
2.把c盘的txt文件读出来
实现过程还是可以想到的,但是他要我把代码写一下,文件的数据结构还要自己想,这样的话我是真写不出来了,很多方法都想不来名字了
后来问了一下师兄,大概思路也差不多,可是师兄在想思路的时候就是会想的很仔细,把整个过程的所有细节都心理有数了,就是第一步该怎么做,第二步要怎么做都想的很清楚了,这些我真该好好的学习一下
网上找一下为什么反射不能动态添加属性:
添加方法和属性,这相当于修改了这个class类型, 可以参考cglib之类的操作java字节码的技术。
不可以,你可以想像一下,反射发生的时机和步骤。当通过反射获得了指定对象的Class对象之后,此时的对象是存放在堆内存中的,而且已经完成了编译,此时的对象是无法对其进行添加熟悉和方法的。换种思路,如果可以的话,那么修改厚的对象将不再是原有类的对象,那么原有类类型的引用变量引用当前对象势必报错。