锁定老帖子 主题:使用反射是否破坏了程序的封装性
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-23
借着楼主的帖子 问问反射,今天上午我在论坛发了一个反射的提问
问题如下 public class Address { private int id; private String addr; private Address(int id) { this.id = id; } private Address(String addr) { this.addr = addr; } public static void main(String[] args) throws Throwable { Class<Address> addClass = Address.class; // 下面的反射不能成功运行,为什么了????, // 如果把构造函数改成private Address(Integer id),却可以 // 如果我想private Address(int id)这样也能反射,应该怎么解决 Constructor<Address> addConstructor = addClass .getDeclaredConstructor(Integer.class); Address address = addConstructor.newInstance(1); System.out.println(address.id); // 此反射可以运行 // Constructor<Address> addConstructor = addClass // .getDeclaredConstructor(String.class); // Address address = addConstructor.newInstance("北京"); // System.out.println(address.addr); } } |
|
返回顶楼 | |
发表时间:2011-09-23
pouyang 写道 求问答连接。。。
我提问,这是链接 http://www.iteye.com/problems/72276 |
|
返回顶楼 | |
发表时间:2011-09-23
防君子 不防小人嘛
这个 也无可厚非 |
|
返回顶楼 | |
发表时间:2011-09-23
Wind_ZhongGang 写道
今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?
你深入研究过反射吗?没有的话不要乱怀疑... 当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以 |
|
返回顶楼 | |
发表时间:2011-09-23
的确是破坏了的~
|
|
返回顶楼 | |
发表时间:2011-09-23
zhzhenqin 写道
Wind_ZhongGang 写道
今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?
你深入研究过反射吗?没有的话不要乱怀疑... 当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以 反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用 |
|
返回顶楼 | |
发表时间:2011-09-24
tag13346 写道
zhzhenqin 写道
Wind_ZhongGang 写道
今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?
你深入研究过反射吗?没有的话不要乱怀疑... 当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以 反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用
我觉得封装是否是天条没有任何意义,关键是使用的人有没有那份维护的心。你要是想破坏封装性的话,地球人都阻止不了你。 |
|
返回顶楼 | |
发表时间:2011-09-24
tag13346 写道
zhzhenqin 写道
Wind_ZhongGang 写道
今天看到问答里有人发了一个关于反射的问题,是如何利用反射来获取类的私有构造函数并进行类的实例化的,由此想到Java提供private关键字就是用来控制类的成员变量和方法在外部无法可见,那么使用反射能够获取到类的私有构造函数,成员变量和方法,并对其进行操作,那么这样做是否破坏了程序的封装性呢?
你深入研究过反射吗?没有的话不要乱怀疑... 当试图对私有的成员变量和私有的方法操作,会抛出异常的.这些不可能正常操作的方法或者变量操作(即便是protected或者默认).只要正常手段不能操作反射也不可以 反射,你先把私有改为共有,执行完了再改回来,为什么不能用。反射破坏封装是毋庸置疑的问题,问题是封装是天条么?平时不这么玩,但是该用的时候还是得用
运行时还能把私有改成共有? 第一次听说 ... 这么说, Java的沙箱模型就跟摆设一样了。 |
|
返回顶楼 | |
发表时间:2011-09-24
应用场景问题
|
|
返回顶楼 | |
发表时间:2011-09-24
啥封装性都是处于更好的维护代码
同样解耦也是为了更好的维护代码 |
|
返回顶楼 | |