1

多くのフレームワーク開発では、構成ファイルから修飾されたクラス名を読み取ってクラスをインスタンス化する必要があります。

さまざまなイントロスペクション戦略と、それを対象とした専用ライブラリ (Objenesis など) があります。

ただし、デフォルトのコンストラクターがない (オーバーロードされた) クラスの場合、オーバーロードされたコンストラクターのシグネチャがわからない場合、イントロスペクションは機能しないと思います。非標準的なアプローチは、sun.misc.Unsafe クラスを使用して割り当てることです。これは私が理解していることです。それは正しい理解ですか?

スーパー クラスは Unsafe を使用してインスタンス化されないため、これには問題があります。しかし、Unsafe は、少なくともその一部である、C コードの「new」演算子が呼び出すものに最も近いと思いました。

そこで問題は、私たちが持っている唯一の情報がクラスの修飾名 (そしてもちろんクラスパスのどこかに存在する! )

4

2 に答える 2

0

クラス名しかない場合は Class.newInstance() を使用できますが、デフォルトのコンストラクターがない場合は Unsafe.allocateInstance() を使用できます。

リフレクションを使用して呼び出すコンストラクターを見つけることができますが、どのコンストラクターまたはどの引数を渡すかはわかりません。

于 2013-11-01T12:28:54.083 に答える