ホームページ >Java >&#&チュートリアル >リフレクションを使用して Java で内部クラスをインスタンス化し、InstantiationException を回避する方法

リフレクションを使用して Java で内部クラスをインスタンス化し、InstantiationException を回避する方法

DDD
DDDオリジナル
2024-10-26 19:22:031019ブラウズ

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

Java でのリフレクションによる内部クラスのインスタンス化

内部クラスをインスタンス化しようとすると、開発者は InstantiationException が発生する可能性があります。この例外は、追加の「非表示」パラメータが考慮されていない場合に発生します。このパラメータは、エンケーシング クラスのインスタンスであり、Class.getDeclaredConstructor() を使用するときに指定する必要があります。さらに、ネストされたクラスがエンケース インスタンスを必要としない場合は、ネストされた静的クラスとして宣言できます。

解決策:

リフレクションを使用して内部クラスをインスタンス化するには:

  1. エンケーシング クラスのクラス オブジェクトを取得します:

    <code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother");</code>
  2. エンケーシング クラスのインスタンスを作成します:

    <code class="java">Object enclosingInstance = enclosingClass.newInstance();</code>
  3. 内部クラスのクラス オブジェクトを取得します:

    <code class="java">Class<?> innerClass = Class.forName("com.mycompany.Mother$Child");</code>
  4. Class.getDeclaredConstructor() を使用して内部クラスのコンストラクターを取得し、提供します引数として囲むクラス:

    <code class="java">Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass);</code>
  5. コンストラクターを呼び出し、囲むインスタンスを引数として渡すことにより、内部クラスのインスタンスを作成します:

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

代替解決策:

内部クラスがエンケース インスタンスを必要としない場合は、ネストされた静的クラスとして宣言することを検討してください:

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

以上がリフレクションを使用して Java で内部クラスをインスタンス化し、InstantiationException を回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。