-
1 # zth—killer
-
2 # 破解孤獨
反射有它特定的應用場景,一般用於框架的建設比較多。像我們比較熟悉的Spring框架就用了反射技術,開發人員日常編碼是比較少用反射的,再加上反射的效能不高,所以每項技術的出現都是有它特定原因的。。
-
3 # 梅涼欣
要從不同角度來看待private和反射。
private代表了封裝,是面向物件的體現。而反射是java這門語言的特性之一,為了提供更加靈活和高階的操作。
所以框架一般會用到反射,用於做一些aop等。而我們的業務程式碼要面向物件程式設計,便於複用擴充套件維護。
換句話說,反射更加底層,底層是不需要oop的。
-
4 # 自摸丶三家
私有公有都是上層概念,反正都是記憶體區域,你想要改,怎麼都能改,比如在java裡面透過反射,比如玩遊戲用的記憶體修改器
-
5 # 寫程式設計師的程式碼
簡單來說,private並不是解決“安全”問題的。安全是指不讓程式碼被非法看到/訪問。但是隻要人能拿到程式碼,總會有辦法去檢視和改變程式碼。private想表達的不是“安全性”的意思,而是OOP的封裝概念,是一種編譯器可以幫助你的設計。這就像是一家沒人的店掛了個牌子“閒人免進”,但你真要進去還是有各種辦法可以辦到。所以private,以及所有其他的access modifier都有一層隱含的含義:如果你按照遵守這套規則,開發者可以保證不問題(不考慮bug的情況下);否則,後果自負。比如,你在用spring的IoC的時候,你知道你要“注入”,不管它是不是private的,你知道“注入”是你自己控制的,是你設計好的效果。那麼透過spring的IoC利用反射幫你注入一些private property是再正常不過的用法。再比如,單元測試,你就想測一個private方法。但是因為private的緣故就是測不了。於是你可以用反射繞開這個限制,開心的做測試。
總上所述,private只是個約定而已。
-
6 # 名字也是亂打的
之前修改別人的程式碼,但是有個pojo是依賴進來的,不能修改。只能建一個類繼承它,加拓展屬性。就用反射覆制屬性過來。
-
7 # 三袋大菠蘿
C++申明為const常量,訪問常量變數地址一樣能修改記憶體資料,C++中宣告為private,透過物件地址和便宜地址一樣可以修改private成員。
都是編譯器約定而已,java更高階,修改更方便。
-
8 # 糖果爸教電腦
沒有set方法,反射會報錯。有set方法,方法裡可以做一些判斷防止非法值。比直接public還是要靈活一些。
-
9 # 程式設計師吉森
反射是java中的超能力。透過反射來訪問private變數,有點像從四維空間造訪三維空間一樣,三維空間的大門對它並不起作用。
但是擁有超能力的同時,也意味著承擔更多風險,所以反射並不是一個在日常場景中經常使用的工具,只有做一些通用的框架性的功能時會用到,並且需要做大量的異常處理。
所以說,private對於正常操作來說,還是起到了限制作用的。
-
10 # 皮蛋XXXXL
如果說防盜門會被切割機破壞,就否定了其防護意義,是不合適的。
其實private和防盜門差不多的。 即我“設計上”不允許你直接呼叫。如果你想歪腦筋繞過,那麼這不是設計者初衷。
-
11 # 唯一浩哥
這個應該這樣來看,private修飾是Java一開始就有的特性,是面相程式設計師的,而反射是後來才出現的功能,一開始是面向Java語言的建立者,維護者的,是針對特殊情況的一種特殊處理手段,程式設計師使用的不多,後來才普及開來使用,所以並不會影響private的存在。
回覆列表
你沒發現反射訪問是很費力嗎?,private的意義就在於沒想讓人訪問,而JAVA反射的開發在於實現這個功能而已,其實在開發之初也沒想到你用反射只是為了訪問一個私有的變數。