Java でのリフレクションを使用した内部クラスのインスタンス化
問題:
内部クラスをインスタンス化しようとしています次のようなリフレクションを使用するクラス:
<code class="java">Class<?> clazz = Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance();</code>
は InstantiationException になります。
答え:
内部クラスをインスタンス化するときは、囲んでいるクラスのインスタンス。これを実現するには、Class.getDeclaredConstructor() を使用してコンストラクターを取得し、周囲のクラスのインスタンスを引数として指定します。
例:
<code class="java">Class<?> enclosingClass = Class.forName("com.mycompany.Mother"); Object enclosingInstance = enclosingClass.newInstance(); Class<?> innerClass = Class.forName("com.mycompany.Mother$Child"); Constructor<?> ctor = innerClass.getDeclaredConstructor(enclosingClass); Object innerInstance = ctor.newInstance(enclosingInstance);</code>
代替解決策:
内部クラスが外側のインスタンスへのアクセスを必要としない場合は、代わりに静的ネストされたクラスの使用を検討してください:
<code class="java">public class Mother { public static class Child { public void doStuff() { // ... } } }</code>
以上がJavaでリフレクションを使用して内部クラスをインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。