リフレクションによる Java でのネストされたクラスのインスタンス化
標準のリフレクション メソッドを使用して、提供された Java コードで定義された内部クラスをインスタンス化できないという問題があります。 Java 開発者が直面するよくある落とし穴。 Class.newInstance() を使用してインスタンスを直接作成しようとすると、囲んでいるクラスのインスタンスを表す隠しパラメータが存在するために問題が発生します。
内部クラスを正常にインスタンス化するには、以下を使用する必要があります。 Class.getDeclaredConstructor() を使用してコンストラクターにアクセスし、それを囲んでいるクラスのインスタンスを引数として提供します。次のコード スニペットは、このアプローチを示しています。
// Exceptions omitted for brevity
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);
あるいは、ネストされたクラスが外側のインスタンスに依存していない場合、より簡単な解決策は、それを静的なネストされたクラスとして宣言することです。
public class Mother {
public static class Child {
public void doStuff() {
// ...
}
}
}
これらのアプローチを利用することで、開発者は Java のリフレクションを使用して、依存内部クラスと独立内部クラスの両方を効果的にインスタンス化できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3