请指教作者: 匿名 时间: 2011-9-24 21:16
如果定义了一个类,这个类中有四个方法
private String A(String string)(return "xxx"),
private String B(String string)(return "xxx"),
private String C(String string)(return "xxx"),
private String D(String i ,String j,String k)(return "xxx"),
ABC这三个方法去服务D,外界只要调用D并且给D相应的参数
在用反射的确是能获得这几个方法,并能传递参数接受返回值,那么拿到ABC的返回值又有什么用呢?
毕竟在反射中不能了解i ,j, k.使用A,B,C中的那个方法去处理的。这对这个类的封装没影响吧作者: 匿名 时间: 2011-9-26 18:50
封装性是指对外隐藏对象的属性和实现细节,仅对外提供公共的访问方式。反射是通过对象找到类,既然找到类了,那么我们就可以得到这个类的成员结构了,例如这个类的属性和方法,即使是private的也能得到,你想,现在这个类我都得到了,那么这个类中的所以东西我肯定是都得到了,我现在只是得到了这个类的成员,并没有说是在外部访问这个类的private的东西。这并没有破坏面向对象的封装性。作者: 匿名 时间: 2011-9-27 10:16
The key to making encapsulation work is to have methods [color=Red]never directly access[/color] instance
fields in a class other than their own. Programs should interact with object data [color=Red]only[/color]
through the object’s methods.
从这个描述上,我认为反射破坏封装这句话是错误的,因为封装他的概念是其他类的[color=Red]不能直接访问[/color]封装类的实例域,程序之间的交互仅仅通过对象的方法,那么反射其实就是通过对象的方法来完成访问实例域的,并没有直接访问实例域。
Encapsulation is the way to give the object its “black box”
behavior, which is the key to [color=Red]reuse[/color] and reliability.
这说明他的封装的目的并不是让别人无法访问,而是让封装的类有更好的可重用性和可靠性。作者: 匿名 时间: 2011-9-27 17:40
前些天我在ITeye上看到过有人讨论这个问题,当时争的好像还挺凶的,各种各样的例子啊,想法啊,模式啊,我看的挺头大,有兴趣的哥们可以去ITeye搜索一下,作者: 匿名 时间: 2011-9-27 22:17
如果你一定要用破坏,可以这样讲:反射能够破坏程序的封装性