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 Reflection はプライベート フィールドにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。