Mencipta tika kelas dalam menggunakan refleksi dalam Java selalunya boleh membawa kepada pengecualian yang serupa dengan yang ditemui di sini. Memahami nuansa instantiation kelas dalam melalui refleksi adalah penting untuk menyelesaikan isu ini.
Semasa cuba untuk membuat instantiate kelas dalam secara langsung melalui Class.forName(...) dan newInstance(), InstantiationException yang mendasari berlaku kerana inner kelas mempunyai parameter "tersembunyi" tambahan - contoh kelas yang disertakan.
Untuk membetulkannya, gunakan pendekatan berikut:
Sebagai contoh:
<code class="java">// Exception handling omitted 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>
Sebagai alternatif, jika kelas dalam tidak memerlukan akses kepada kelas yang disertakan, pertimbangkan untuk mengisytiharkannya sebagai kelas statik bersarang, seperti yang digambarkan di sini:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Atas ialah kandungan terperinci Cara Menghidupkan Kelas Dalaman dengan Refleksi dalam Java: Mengapa Kita Memerlukan Contoh Kelas Terlampir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!