Rumah >Java >javaTutorial >Bagaimanakah Anda Boleh Menghasilkan Kelas Dalaman Menggunakan Refleksi Java Tanpa Contoh Kelas Terlampir?
Menginstantiasi Kelas Dalam dengan Refleksi Java
Di Jawa, cubaan untuk membuat instantiate kelas dalam menggunakan refleksi tanpa memberikan contoh kelas yang disertakan akan menghasilkan InstantiationException. Ini berlaku kerana kelas dalam mempunyai pergantungan tersembunyi pada contoh kelas tertutupnya.
Penyelesaian:
Untuk menyelesaikan isu ini, dapatkan semula pembina kelas dalam menggunakan Kelas. getDeclaredConstructor dan luluskan contoh kelas yang dilampirkan sebagai hujah sambil membuatnya seketika.
Contoh:
<code class="java">// Assuming "com.mycompany.Mother" is the enclosing class // and "com.mycompany.Mother$Child" is the inner class // Get the enclosing class Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); // Instantiate the enclosing class Object enclosingInstance = enclosingClass.newInstance(); // Get the inner class Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); // Get the constructor with the enclosing class as a parameter Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); // Instantiate the inner class Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Pendekatan Alternatif:
Jika kelas dalam tidak memerlukan akses kepada contoh kelas yang disertakan, ia boleh ditakrifkan sebagai kelas bersarang statik. Ini menghapuskan pergantungan pada kelas yang disertakan.
Contoh Kelas Bersarang Statik:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menghasilkan Kelas Dalaman Menggunakan Refleksi Java Tanpa Contoh Kelas Terlampir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!