できません。パラメーターなしのコンストラクターを「要求」してコンパイラーによって強制する方法はありません。定義により、クラスのインスタンスを作成するには、必要なパラメーターを提供する必要があります。クラス コントラクト (適切に初期化されていないため)。
これをコード レベルで強制する適切な方法は、オブジェクト ファクトリとインターフェイスを使用することです。コンパイル時の型がわからないため、リフレクションを使用する必要があると思います。この場合、各タイプのインスタンスを生成する方法を知っている「Factory」も必要です。このファクトリは、適切なコンストラクタを認識して呼び出すことができるように、問題の型でビルド/コンパイルする必要があります。その後、ファクトリは、オブジェクトのインスタンス化のためにファクトリに委譲できるようにする「ObjectFactory」など、コードが認識しているインターフェイスを実装します。次に、オブジェクトファクトリがインスタンス化できる型を担当するものとして登録するために使用できるメソッドを用意します。
作成しようとしているクラスに同梱されているコードでは:
static {
FactoryRegistry.register(TypeA.class, new TypeAFactory());
}
そしてあなたのコードで:
Class<?> unknownClass = ...;
Object obj = FactoryRegistry.getFactory(unknownClass).newInstance();
(メソッドを実装および指定するFactory
インターフェースがある場合)TypeAFactory
newInstance
それが何であるか、またはインスタンス化する方法はわかりませんunknownClass
が、そのクラスに付属のコードがファクトリを登録している場合は、そのファクトリを照会して、オブジェクトを作成するように依頼できます。unknownClass
が本当にの場合TypeA.class
、レジストリはTypeAFactory
オブジェクトを作成するために登録された を返します。
または、フレームワークがロードしているコードの作成者に、引数のないコンストラクターを動的に含めるよう要求することもできます。厳密に強制されているわけではありませんが、作成者が実装しやすい場合があります。