java是什么 既然Java反射可以訪問和修改私有成員變量,那封裝成private還有意義么?
既然Java反射可以訪問和修改私有成員變量,那封裝成private還有意義么?很高興能回答你的問題:簡單來說,private并不是解決“安全”問題的。安全是指不讓代碼被非法看到/訪問。但是只要人能拿到
既然Java反射可以訪問和修改私有成員變量,那封裝成private還有意義么?
很高興能回答你的問題:
- 簡單來說,private并不是解決“安全”問題的。
- 安全是指不讓代碼被非法看到/訪問。但是只要人能拿到代碼,總會有辦法去查看和改變代碼。
- private想表達(dá)的不是“安全性”的意思,而是OOP的封裝概念,是一種編譯器可以幫助你的設(shè)計(jì)。這就像是一家沒人的店掛了個牌子“閑人免進(jìn)”,但你真要進(jìn)去還是有各種辦法可以辦到。所以private,以及所有其他的access modifier都有一層隱含的含義:如果你按照遵守這套規(guī)則,開發(fā)者可以保證不問題(不考慮bug的情況下);否則,后果自負(fù)。
- 比如,你在用spring的IoC的時候,你知道你要“注入”,不管它是不是private的,你知道“注入”是你自己控制的,是你設(shè)計(jì)好的效果。那么通過spring的IoC利用反射幫你注入一些private property是再正常不過的用法。
- 再比如,單元測試,你就想測一個private方法。但是因?yàn)閜rivate的緣故就是測不了。于是你可以用反射繞開這個限制,開心的做測試。
總上所述,private只是個約定而已。