文章出自:http://www.zhihu.com/question/21115097
Java中setAccessible不会破坏私有类的封装性吗?
最近看到反射时,惊异于这个方法的作用性,虽说提供了很简便的类和元素的检查机制,但是可以随意访问甚至设置类的私有成员不是完全破坏了封装特性吗?这样如何保证私有数据成员的安全性?
1.
public/.../private的区分,想做到的是不暴露内部实现
但确实在特殊情况下,需要关注甚至修改内部实现(性能/测试环境/使用场景)
这种例外的存在并不影响封装的理念
这更多的是一种“知道这么多就够别人用了”,而不是“这是机密,坚决不能让外人知道”
2.
setAccessible是一种hack
潜台词是:你清楚内部实现,你知道你在做什么,相信你不会搞砸
平时不需要过分担心“如果别人用setAccessible来搞我怎么办”之类的问题
死代码防不了活人,也没必要
3.
只有江湖骗子才会鼓吹“只要……,你就安全了”
安全是一整套体系,环环相扣,每一环没扣上时都是隐患
Java是有SecurityManager,那又怎么样呢,听说过金山游侠吧
围绕真正的敏感数据单独防护,才是正道
public/.../private的区分,想做到的是不暴露内部实现
但确实在特殊情况下,需要关注甚至修改内部实现(性能/测试环境/使用场景)
这种例外的存在并不影响封装的理念
这更多的是一种“知道这么多就够别人用了”,而不是“这是机密,坚决不能让外人知道”
2.
setAccessible是一种hack
潜台词是:你清楚内部实现,你知道你在做什么,相信你不会搞砸
平时不需要过分担心“如果别人用setAccessible来搞我怎么办”之类的问题
死代码防不了活人,也没必要
3.
只有江湖骗子才会鼓吹“只要……,你就安全了”
安全是一整套体系,环环相扣,每一环没扣上时都是隐患
Java是有SecurityManager,那又怎么样呢,听说过金山游侠吧
围绕真正的敏感数据单独防护,才是正道