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

Bagaimana untuk Menghidupkan Kelas Dalaman menggunakan Refleksi di Jawa?

Patricia Arquette
Lepaskan: 2024-10-28 22:27:30
asal
293 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan