Rumah >Java >javaTutorial >Bagaimana untuk Menghidupkan Kelas Dalaman di Java Menggunakan Refleksi dan Mengelakkan InstantiationException?
Instantiation of Inner Classes melalui Reflection in Java
Apabila cuba membuat instantiate kelas dalam, pembangun mungkin menghadapi InstantiationException. Pengecualian ini berlaku apabila parameter "tersembunyi" tambahan tidak diambil kira. Parameter ini ialah contoh kelas pembungkus dan mesti disediakan apabila menggunakan Class.getDeclaredConstructor(). Selain itu, jika kelas bersarang tidak memerlukan contoh pembungkusan, ia boleh diisytiharkan sebagai kelas statik bersarang.
Penyelesaian:
Untuk membuat instantiate kelas dalam menggunakan pantulan :
Dapatkan objek kelas kelas pembungkus:
<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
Buat contoh kelas pembungkus:
<code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
Dapatkan objek kelas bagi kelas dalam:
<code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
Gunakan Class.getDeclaredConstructor() untuk mendapatkan pembina kelas dalam dan sediakan kelas yang disertakan sebagai hujah:
<code class="java">Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);</code>
Buat contoh kelas dalam dengan menggunakan pembina dan luluskan contoh yang disertakan sebagai hujah:
<code class="java">Object innerInstance = ctor.newInstance(enclosingInstance);</code>
Penyelesaian Alternatif:
Jika kelas dalam tidak memerlukan contoh pembungkus, pertimbangkan untuk mengisytiharkannya sebagai kelas statik bersarang:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menghidupkan Kelas Dalaman di Java Menggunakan Refleksi dan Mengelakkan InstantiationException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!