Membuat Kelas Dalaman dengan Refleksi dalam Java
Masalah:
Percubaan untuk membuat seketika batin kelas menggunakan refleksi, seperti:
<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance();</code>
menghasilkan InstantiationException.
Jawapan:
Apabila membuat instantiation kelas dalaman, ia memerlukan contoh kelas yang disertakan. Untuk mencapai ini, gunakan Class.getDeclaredConstructor() untuk mendapatkan pembina dan sediakan contoh kelas yang disertakan sebagai hujah.
Contoh:
<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); Object enclosingInstance = enclosingClass.newInstance(); Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Penyelesaian Alternatif:
Jika kelas dalam tidak memerlukan akses kepada contoh yang disertakan, pertimbangkan untuk menggunakan kelas bersarang statik sebaliknya:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menghidupkan Kelas Dalaman menggunakan Refleksi di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!