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

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

DDD
DDDasal
2024-10-26 19:22:03928semak imbas

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>
  2. Buat contoh kelas pembungkus:

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

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
  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>
  5. Buat contoh kelas dalam dengan menggunakan pembina dan luluskan contoh yang disertakan sebagai hujah:

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

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>

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!

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