Rumah  >  Artikel  >  Java  >  Bolehkah Java Reflection Mengakses Medan Peribadi?

Bolehkah Java Reflection Mengakses Medan Peribadi?

Patricia Arquette
Patricia Arquetteasal
2024-10-28 06:02:02525semak imbas

Can Java Reflection Access Private Fields?

Mengakses Medan Peribadi melalui Refleksi dalam Java

Soalan: Bolehkah mekanisme refleksi Java digunakan untuk mengakses medan peribadi, seperti medan str dalam coretan kod berikut?

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

   private String str;
   public void setStr(String value) { str = value; }
}</code>

Jawapan: Ya, adalah mungkin untuk mengakses medan peribadi melalui refleksi. Walau bagaimanapun, kebenaran keselamatan mesti diberikan dan setAccessible(true) mesti digunakan apabila mengakses medan daripada kelas lain.

Pertimbangkan contoh berikut:

<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>

Nota: Amalan ini secara amnya tidak digalakkan kerana ia melanggar prinsip enkapsulasi yang ditetapkan oleh pengarang kelas asal. Semakan pengesahan atau kebergantungan pada medan lain mungkin dipintas, membawa kepada tingkah laku yang tidak dapat diramalkan.

Atas ialah kandungan terperinci Bolehkah Java Reflection Mengakses Medan Peribadi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn