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!