首頁 > Java > java教程 > 主體

Java反射可以存取私有欄位嗎?

Patricia Arquette
發布: 2024-10-28 06:02:02
原創
635 人瀏覽過

Can Java Reflection Access Private Fields?

Java中透過反射存取私有欄位

問題:能否利用Java欄位的反射機制來存取私有欄位的反射機制來存取私有欄位,例如下面程式碼片段中的str字段?

<code class="java">public class Test {

   private String str;
   public void setStr(String value) { str = value; }
}</code>
登入後複製

答案:是的,可以透過反射來存取私有欄位。但是,從不同類存取該欄位時,必須授予安全權限,並且必須使用 setAccessible(true)。

考慮以下範例:

<code class="java">import java.lang.reflect.*;

public class Other {

    private String str;
    public void setStr(String value) { str = value; }
}

public class Test {

    public static void main(String[] args) throws Exception {

        Other t = new Other();
        t.setStr("hi");
        Field field = Other.class.getDeclaredField("str");
        field.setAccessible(true);
        Object value = field.get(t);
        System.out.println(value);
    }
}</code>
登入後複製

注意: 這種做法通常不被鼓勵,因為它違反了原始類作者設定的封裝原則。驗證檢查或對其他欄位的依賴可能會被繞過,從而導致不可預測的行為。

以上是Java反射可以存取私有欄位嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板