回覆列表
  • 1 # zth—killer

    你沒發現反射訪問是很費力嗎?,private的意義就在於沒想讓人訪問,而JAVA反射的開發在於實現這個功能而已,其實在開發之初也沒想到你用反射只是為了訪問一個私有的變數。

  • 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的存在。

  • 中秋節和大豐收的關聯?
  • 每天跑步6公里,對腿部肌肉的鍛鍊效果怎麼樣?用不用還要做槓鈴深蹲了?