4

ここでこのメソッドのドキュメントを調べます: getDeclaredConstructor()

パブリックコンストラクターのみを返すという参照は見られませんでした。

私の問題は、次のコードがあることです。

protected BaseClass internalCreate(String className) throws Exception {

    Class<? extends BaseClass> classObj = Class.forName(className)
                    .asSubclass(BaseClass.class);

    Constructor<?> ctor = classObj.getDeclaredConstructor((Class[]) null);
    ctor.setAccessible(true);

    return (BaseClass) ctor.newInstance();
}

デフォルトのコンストラクターの可視性 (パッケージ プライベート) を持つクラスに対してこのメ​​ソッドを実行すると、MissingMethod 例外が発生します。コンストラクターをパブリックに変更すると、問題が修正されます。

4

1 に答える 1

5

このメソッドは、クラスで宣言されたコンストラクター (public かどうか) を返します。ただし、返されたコンストラクターを使用してインスタンスをインスタンス化できるという意味ではありません。これがエラーが発生する理由です。アクセスが許可されていない場合は、そのようなコンストラクタで setAccessible(true) を呼び出すように呼び出します。これは、getDeclaredMethod および getDeclaredFields と同じです。

于 2013-06-07T06:47:14.657 に答える