Heim >Java >javaLernprogramm >Wie instanziiere ich innere Klassen in Java mithilfe von Reflection und vermeide InstantiationException?

Wie instanziiere ich innere Klassen in Java mithilfe von Reflection und vermeide InstantiationException?

DDD
DDDOriginal
2024-10-26 19:22:031019Durchsuche

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

Instanziierung innerer Klassen über Reflection in Java

Beim Versuch, eine innere Klasse zu instanziieren, stoßen Entwickler möglicherweise auf die InstantiationException. Diese Ausnahme tritt auf, wenn ein zusätzlicher „versteckter“ Parameter nicht berücksichtigt wird. Dieser Parameter ist die Instanz der umschließenden Klasse und muss bei Verwendung von Class.getDeclaredConstructor() bereitgestellt werden. Wenn die verschachtelte Klasse außerdem keine umschließende Instanz benötigt, kann sie als verschachtelte statische Klasse deklariert werden.

Lösung:

Um eine innere Klasse mithilfe von Reflektion zu instanziieren :

  1. Erhalten Sie das Klassenobjekt der Encasing-Klasse:

    <code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
  2. Erstellen Sie eine Instanz der Encasing-Klasse:

    <code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
  3. Erhalten Sie das Klassenobjekt der inneren Klasse:

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
  4. Verwenden Sie Class.getDeclaredConstructor(), um den Konstruktor der inneren Klasse abzurufen und bereitzustellen die umschließende Klasse als Argument:

    <code class="java">Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);</code>
  5. Erstellen Sie eine Instanz der inneren Klasse, indem Sie den Konstruktor aufrufen und die umschließende Instanz als Argument übergeben:

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

Alternative Lösung:

Wenn die innere Klasse die umschließende Instanz nicht benötigt, sollten Sie sie als verschachtelte statische Klasse deklarieren:

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

Das obige ist der detaillierte Inhalt vonWie instanziiere ich innere Klassen in Java mithilfe von Reflection und vermeide InstantiationException?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn