0

ドメインレベルのオブジェクトから DTO に変換するオブジェクト変換クラスがあります。

私は効果的に次の構造を持っています

class RuleGroupDTO {
List<RuleDTO> ruleDTOs;
// other members

EvaluationRuleDTOAssignmentRuleDTOどちらもRuleDTOから拡張されています

変換用の私の API は次のとおりです。

public RuleGroupDTO convert(RuleGroup ruleGroup);

したがって、ドメインRuleGroupを convert クラスに渡すと、 に関連付けられたコードが参照され、内にカプセル化されたまたはRuleGroupが構築されます。EvaluationRuleDTOAssignmentRuleDTOsRuleGroupDTO

RuleGroupDTO を取得すると、 または のList<RuleDTO>いずれかList<EvaluationRuleDTO>が含まれていることがわかりますList<AssignmentRuleDTO>

ただし、正しいクラス バージョンを取得するには、 をループして、またはList<RuleDTO>にキャストする必要があります。List<EvaluationRuleDTO>List<AssignmentRuleDTO>

これは面倒に思えますが、このループ + キャストの実行を回避するために、いくつかの一般的な概念を利用できると考えています。

ここでジェネリックを利用するために API またはオブジェクト構造を変更するには、どのようなアプローチが考えられますか?

4

2 に答える 2

0

一定量のタイプがあり、それらを分離したい場合は、さまざまなタイプが異なるコレクションに分離された pojo を返します。

public class DTOResult {
  public List<EvaluationRuleDTO> evalDTOs;
  public List<AssignmentRuleDTO> assignDTOs;
}
于 2012-07-20T14:58:44.110 に答える
0

キャストを避けるために使用List<RuleDTO>し、念のためにループを記述しないでください。RuleDTO にビジター パターンを実装させて、任意のコンシューマーがいずれかの種類のサブクラスをタイプ セーフな方法で処理できるようにします。

Javaはバリアント型が苦手です。

于 2012-07-20T15:39:34.520 に答える