Instantiation of Nested Classes in Java melalui Reflection
Ketidakupayaan untuk membuat instantiate kelas dalam yang ditakrifkan dalam kod Java yang disediakan menggunakan kaedah pantulan standard ialah perangkap biasa yang dihadapi oleh pembangun Java. Apabila cuba mencipta tika secara terus menggunakan Class.newInstance(), isu timbul disebabkan oleh kehadiran parameter tersembunyi yang mewakili tika kelas yang disertakan.
Untuk berjaya membuat contoh kelas dalam, anda perlu menggunakan Class.getDeclaredConstructor() untuk mengakses pembina dan menyediakan contoh kelas yang disertakan sebagai hujah. Coretan kod berikut menggambarkan pendekatan ini:
<code class="java">// Exceptions omitted for brevity 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 bersarang tidak bergantung pada contoh yang disertakan, penyelesaian yang lebih mudah ialah mengisytiharkannya sebagai kelas bersarang statik:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
Dengan menggunakan pendekatan ini, pembangun boleh membuat instantiate kedua-dua kelas dalaman bergantung dan bebas menggunakan refleksi dalam Java.
Atas ialah kandungan terperinci Bagaimana untuk Menghidupkan Kelas Bersarang di Java Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!