Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menghidupkan Kelas Bersarang di Java Menggunakan Refleksi?

Bagaimana untuk Menghidupkan Kelas Bersarang di Java Menggunakan Refleksi?

DDD
DDDasal
2024-10-27 03:03:30143semak imbas

How to Instantiate Nested Classes in Java Using Reflection?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn