Rumah > Java > javaTutorial > teks badan

Cara Menghidupkan Kelas Dalaman dengan Refleksi dalam Java: Mengapa Kita Memerlukan Contoh Kelas Terlampir?

DDD
Lepaskan: 2024-10-29 08:09:30
asal
956 orang telah melayarinya

How to Instantiate Inner Classes with Reflection in Java: Why Do We Need an Enclosing Class Instance?

Menginstantiasikan Kelas Dalaman dengan Refleksi dalam Java

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:

  1. Dapatkan kelas yang disertakan menggunakan Class.forName(. ..).
  2. Buat contoh kelas yang disertakan menggunakan newInstance().
  3. Dapatkan semula kelas dalam menggunakan Class.forName(...).
  4. Gunakan getDeclaredConstructor (...) untuk mengakses pembina kelas dalam, menyatakan kelas yang disertakan sebagai argumen.
  5. Akhir sekali, nyatakan kelas dalam menggunakan pembina yang diambil dan berikan contoh kelas yang disertakan sebagai parameter pertama.

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan