Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menghidupkan Kelas Dalaman di Java Menggunakan Refleksi dan Mengelakkan InstantiationException?

DDD
Lepaskan: 2024-10-26 19:22:03
asal
941 orang telah melayarinya

How to Instantiate Inner Classes in Java Using Reflection and Avoid InstantiationException?

Instantiation of Inner Classes melalui Reflection in Java

Apabila cuba membuat instantiate kelas dalam, pembangun mungkin menghadapi InstantiationException. Pengecualian ini berlaku apabila parameter "tersembunyi" tambahan tidak diambil kira. Parameter ini ialah contoh kelas pembungkus dan mesti disediakan apabila menggunakan Class.getDeclaredConstructor(). Selain itu, jika kelas bersarang tidak memerlukan contoh pembungkusan, ia boleh diisytiharkan sebagai kelas statik bersarang.

Penyelesaian:

Untuk membuat instantiate kelas dalam menggunakan pantulan :

  1. Dapatkan objek kelas kelas pembungkus:

    <code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
    Salin selepas log masuk
  2. Buat contoh kelas pembungkus:

    <code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
    Salin selepas log masuk
  3. Dapatkan objek kelas bagi kelas dalam:

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
    Salin selepas log masuk
  4. Gunakan Class.getDeclaredConstructor() untuk mendapatkan pembina kelas dalam dan sediakan kelas yang disertakan sebagai hujah:

    <code class="java">Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);</code>
    Salin selepas log masuk
  5. Buat contoh kelas dalam dengan menggunakan pembina dan luluskan contoh yang disertakan sebagai hujah:

    <code class="java">Object innerInstance = ctor.newInstance(enclosingInstance);</code>
    Salin selepas log masuk

Penyelesaian Alternatif:

Jika kelas dalam tidak memerlukan contoh pembungkus, pertimbangkan untuk mengisytiharkannya sebagai kelas statik bersarang:

<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 di Java Menggunakan Refleksi dan Mengelakkan InstantiationException?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!