1

私は Java のリフレクション API の基本的な知識を持っています。したがって、これは単に方法の問題ではなく、それが可能かどうか、そして私が最善の方法で解決策を講じているかどうかの問題です。

相互に関連する複数のプロジェクトの受け入れテストを行っています。これらの各プロジェクトは、社内の抽象化 API を使用して MongoDB ストアからデータを取得します。このテストを容易にするために、各コンポーネントには事前にロードされたデータがデータベースで使用可能である必要があります。

morphia ORM ライブラリを使用して複数のインスタンスをロードするために、DTO (コンパイル済みクラス バイナリ) を受け入れるコマンド ライン ツールを構築しています。私たちのチームの各メンバーが、必要な量のレコードをインスタンス化するための DTO (jar またはディレクトリ形式) とファイル (csv またはその他) を cli を介して渡すジェネレーターを実行できるようにしたいと考えています。

クラスの読み込みが正常に機能していURLClassLoaderます。今、ファイルのデータを使用して、このクラスのインスタンスをインスタンス化しようとしています。

これは可能ですか?シリアル化されたオブジェクトはより良いアプローチでしょうか?

4

2 に答える 2

3

これは、JavaReflectionAPIを使用して完全に可能です。

  • クラスインスタンスを名前でロードします(Class.forName(className)、実際にはClassLoaderインスタンスは必要ありません)
  • コンストラクターのコンストラクターインスタンスを取得するにはパラメーターがあり、このコンストラクターインスタンスでnewInstance(Object ... args)を呼び出して、DTOクラスのインスタンスを作成します。
  • ClassインスタンスでgetDeclaredFields()を呼び出し、それらを反復処理して値(field.set(instance、value))を設定します。プライベートフィールドにアクセスできるようにするには、必ずfield.setAccessible(true)を呼び出してください。
于 2011-10-27T13:13:59.687 に答える
0

「シリアル化されたオブジェクト」が缶詰のインスタンスを意味する場合、いいえ、テキストファイルからプロパティをロードすることで、オブジェクトの数を含むテストデータの微調整がはるかに簡単になります(それが目標の場合)。

しかし、確かに、それは可能です。入力ファイルからデータをマーシャリング解除し、通常のコードの場合と同様に、それを使用して問題のオブジェクトを初期化または構築します。

于 2011-10-27T13:14:55.387 に答える