Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menghidupkan Kelas Dalaman menggunakan Refleksi di Jawa?

Bagaimana untuk Menghidupkan Kelas Dalaman menggunakan Refleksi di Jawa?

Patricia Arquette
Patricia Arquetteasal
2024-10-28 22:27:30186semak imbas

How to Instantiate Inner Classes using Reflection in Java?

Membuat Kelas Dalaman dengan Refleksi dalam Java

Masalah:

Percubaan untuk membuat seketika batin kelas menggunakan refleksi, seperti:

<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();</code>

menghasilkan InstantiationException.

Jawapan:

Apabila membuat instantiation kelas dalaman, ia memerlukan contoh kelas yang disertakan. Untuk mencapai ini, gunakan Class.getDeclaredConstructor() untuk mendapatkan pembina dan sediakan contoh kelas yang disertakan sebagai hujah.

Contoh:

<code class="java">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>

Penyelesaian Alternatif:

Jika kelas dalam tidak memerlukan akses kepada contoh yang disertakan, pertimbangkan untuk menggunakan kelas bersarang statik sebaliknya:

<code class="java">public class Mother {
    public static class Child {
        public void doStuff() {
            // ...
        }
    }
}</code>

Atas ialah kandungan terperinci Bagaimana untuk Menghidupkan Kelas Dalaman menggunakan Refleksi di Jawa?. 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