Rumah  >  Artikel  >  Java  >  Bagaimanakah Anda Boleh Menghasilkan Kelas Dalaman Menggunakan Refleksi Java Tanpa Contoh Kelas Terlampir?

Bagaimanakah Anda Boleh Menghasilkan Kelas Dalaman Menggunakan Refleksi Java Tanpa Contoh Kelas Terlampir?

Susan Sarandon
Susan Sarandonasal
2024-10-27 00:37:03234semak imbas

How Can You Instantiate an Inner Class Using Java Reflection Without an Instance of the Enclosing Class?

Menginstantiasi Kelas Dalam dengan Refleksi Java

Di Jawa, cubaan untuk membuat instantiate kelas dalam menggunakan refleksi tanpa memberikan contoh kelas yang disertakan akan menghasilkan InstantiationException. Ini berlaku kerana kelas dalam mempunyai pergantungan tersembunyi pada contoh kelas tertutupnya.

Penyelesaian:

Untuk menyelesaikan isu ini, dapatkan semula pembina kelas dalam menggunakan Kelas. getDeclaredConstructor dan luluskan contoh kelas yang dilampirkan sebagai hujah sambil membuatnya seketika.

Contoh:

<code class="java">// Assuming "com.mycompany.Mother" is the enclosing class
// and "com.mycompany.Mother$Child" is the inner class

// Get the enclosing class
Class<?> enclosingClass = Class.forName("com.mycompany.Mother");
// Instantiate the enclosing class
Object enclosingInstance = enclosingClass.newInstance();

// Get the inner class
Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");
// Get the constructor with the enclosing class as a parameter
Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);

// Instantiate the inner class
Object innerInstance = ctor.newInstance(enclosingInstance);</code>

Pendekatan Alternatif:

Jika kelas dalam tidak memerlukan akses kepada contoh kelas yang disertakan, ia boleh ditakrifkan sebagai kelas bersarang statik. Ini menghapuskan pergantungan pada kelas yang disertakan.

Contoh Kelas Bersarang Statik:

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

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menghasilkan Kelas Dalaman Menggunakan Refleksi Java Tanpa Contoh Kelas Terlampir?. 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