クラスA - >テーブルの行A ClassB - >テーブルの行Bのように、RDMSテーブルの行に対応する一連のデータオブジェクトがあります。 。 。 ClassZ - > TableZの行 私はJDBCを使用してこれらのレコードをフェッチしています。結果セットからオブジェクトを作成しています(結果セットが巨大になることがありますので注意してください)parseClassA()、parseClassB ..parseClassZ()、現在、スイッチ(classType)のようなクラスの型を決定し、対応するクラスのオブジェクトを与える巨大なswitch文を持つ関数を持っています。最適な方法はこれを行うには?タイプに基づいてJavaオブジェクトを作成する
0
A
答えて
1
あなたはそれを作成するために、パーサーに作成するためにクラスを関連付けマップ構造使用することができますあなたが必要な場合は
static{
parserByClass = new HashMap<>();
parserByClass.put(MyClass.class, MyParserMyClass::new);
parserByClass.put(MyOtherClass.class, MyOtherParserMyClass::new);
...
}
:あなたが必要なすべてのマッピングでマップを初期化することができ
Map<Class<?> clazz, Supplier<Parser>>
を特定のクラスを作成するには、マップを使用してこのクラスのパーサーを取得することができます。
Parser<MyClass> parser = parserByClass.get(MyClass.class).get();
あなたはとてもパーサのparse()
メソッドを呼び出すことができますのでご注意ください
public interface Parser<T> {
T parse(ResultSet resultSet);
}
:
ResultSet resultSet = ...;
MyClass parse = parser.parse(resultSet);
は、あなたがparse()
メソッドを定義するParser
インタフェースを持つべきであると返されたタイプを定義することができるように、理想的にはそれはテストされていないコードです。
2
これはORMと呼ばれています。休止状態は最も広く採用されています。または、DSLを選択することもできます。私たちが対象にしており、我々はここで、機能探してアプローチを持っている場合がありますので、アウトラインは以下のとおりです。あなたはタイプのものでなければならないマップを検索している、
Stream.of(resultSet).flatMap(r -> someHowMakThisAStream(r))
しかし
Map<String,Function<Map<String,Object>,T> lookup...
lookup.put("SomeTable", SomeClass::new);
各クラスは、各インスタンシエーションが誤って結果セットをあまりにも遠くに転送することがないように、各クラスが列名のマップを値(正規化)にし、結果セットを直接取得しないようにします。
は、その後、あなたは、擬似機能で、行うことができます。stream.of(results).flatMap().map(valMap -> lookup.get(tableName).apply(valMap))
関連する問題
- 1. jsr363に基づいて経度タイプを作成する
- 2. JSONオブジェクトに基づいてフォームを動的に作成する
- 3. 不変オブジェクトに基づいてレコードセットを作成する
- 4. 既存のテーブルに基づいてタイプを作成
- 5. 既存のオブジェクトの条件に基づいて同じタイプのオブジェクトを作成する。 C#LINQ
- 6. タイムゾーンに基づいてNSDateオブジェクトを作成します
- 7. jsonオブジェクトに基づいてJSONスキーマを作成します
- 8. 変数に基づいてオブジェクトの新しいインスタンスを作成
- 9. 異なるタイプの別のコレクションに基づいてオブジェクトコレクションを作成する
- 10. Javaストリームは、2つの異なるオブジェクトに基づいて新しいオブジェクトを作成します。
- 11. プロパティに基づいてオブジェクトの配列からオブジェクトを作成する
- 12. 文字列に基づいて新しいタイプのオブジェクトを作成する方法は?
- 13. java:作成日に基づいてファイルをソート
- 14. Ember Appに基づいてAPIを作成/作成する
- 15. Linq:タイプAのオブジェクトに基づいたタイプAのフィルタリスト?
- 16. confirm()の結果に基づいて新しいオブジェクトを作成する
- 17. Python3 Pandas - オブジェクトの配列に基づいて新しいDataFrameを作成する
- 18. ユーザの入力に基づいて実行時にオブジェクトを作成する
- 19. いくつかの基準に基づいて異なるタイプを作成する
- 20. 複数のパラメータに基づいて異なるオブジェクトを作成する
- 21. enumに基づいてオブジェクトを構成する
- 22. オブジェクトのプロパティに基づいてグループ識別子を作成する
- 23. オブジェクトの名前の文字ベクトルに基づいてリストを作成する
- 24. three.jsのJSONオブジェクトに基づいてメッシュを作成する方法
- 25. javascriptのパラメータに基づいてオブジェクトのシングルトンインスタンスを作成する方法は?
- 26. コンテンツタイプに基づいてPOST作成操作を制限する
- 27. Java Webアプリケーションのテンプレートに基づいてhtmlファイルを作成する
- 28. Java - カメラの回転に基づいて3Dベクトルを作成する方法
- 29. 与えられたタイトルに基づいてオブジェクトのタイプを提案する
- 30. グループに基づいて新しいパンダデータフレームを作成する
まず、私はおそらくそれを行うには、複数の方法があるので、間違った言葉かもしれない「最適」と言うだろう。それらは異なるトレードオフを持つかもしれないので、 "最適"をよりよく定義する必要があります。次に、それはあなたのコード、要件などにも依存しますが、それを行うには 'Map'かもしれません。次に、そのマップからパーサを取得しようとします。もしあなたがそれを取得したら、(例えば、 'parse(ResultSet)'のような)メソッドを呼び出します。 –
Thomas
あなたが探しているものはここにあると思います。おそらく、公益団体の主題ですか? https://stackoverflow.com/a/6094602/3543153 – DamienB
@Thomas地図をどのように作成しますか?私はデータベースを照会するたびにマップを構築したいのですか? – kumarD