既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么?相关的知识,希望对你有一定的参考价值。

参考技术A 你没发现反射访问是很费力吗?,private的意义就在于没想让人访问,而JAVA反射的开发在于实现这个功能而已,其实在开发之初也没想到你用反射只是为了访问一个私有的变量。 参考技术B 要从不同角度来看待private和反射。

private代表了封装,是面向对象的体现。而反射是java这门语言的特性之一,为了提供更加灵活和高级的操作。

所以框架一般会用到反射,用于做一些aop等。而我们的业务代码要面向对象编程,便于复用扩展维护。

换句话说,反射更加底层,底层是不需要oop的。
参考技术C C++申明为const常量,访问常量变量地址一样能修改内存数据,C++中声明为private,通过对象地址和便宜地址一样可以修改private成员。

都是编译器约定而已,java更高级,修改更方便。
参考技术D 私有公有都是上层概念,反正都是内存区域,你想要改,怎么都能改,比如在java里面通过反射,比如玩游戏用的内存修改器[捂脸] 第5个回答  2020-03-01 没有set方法,反射会报错。有set方法,方法里可以做一些判断防止非法值。比直接public还是要灵活一些。

以上是关于既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么?的主要内容,如果未能解决你的问题,请参考以下文章

java 外部类可以访问内部类private问题

反射那些事

[ Java学习基础 ] Java的封装性与访问控制

Java反射机制可以动态修改实例中final修饰的成员变量吗

Java反射机制

如何通过反射访问私有方法和私有数据成员?