2016-04-12 8 views
0

誰かが私に何かを手助けできるかどうか疑問です。enumを使用してオブジェクトプロパティを別のオブジェクトプロパティにマッピングしますか?

基本的に私は異なる場所から2つのオブジェクト、例えば2つの異なる自動車クラスを持っています。私は作成したマッパーを使ってcarAクラスのプロパティをcarBクラスのプロパティにマップしたいと思います。これは、以下に示すように、ほとんどのシナリオでは単純です。

public carB carMapper(carA car){ 

    carB carb = new carB(); 

    carb.weight = car.weight 
    carb.size = car.size 


} 

しかし、フォードキャラ店で車のモデルのクラスキャラがCARBとわずかに異なるフォーマットの対応する値を格納するいくつかのシナリオ、すなわち、それはこのようFRDが、炭水化物店舗ありますフォードとして。これらを正しくマップできる簡単な方法(おそらく列挙型など)がありますか?私は

if (carA.model = frd) 
    then carB.model = Ford 

などを行うことができます知っているが、私はすべてのシナリオのためにこれを行うにしたいいけない....私はキャラとCARBの両方の可能な値を知って、私は私を助けるためにいくつかの方法で、列挙型を使用することができますここに?

ありがとうございました。

+0

ここで 'CarA'と' CarB'の 'model'変数のタイプは何ですか?それらはすでに 'enum'型か' String'ですか?それらが既に 'enum'型の場合、' CarA'または 'CarB'の両方に同じ列挙型を使用してみませんか? –

答えて

0

フィードバックをお寄せいただきありがとうございます。ご回答いただきありがとうございます。申し訳ありませんが、早急に返信する機会はありませんでした。私は列挙型を使って私の問題に対する解決策を見出しました。それは私が探していたものに合っています。何らかの理由で理想的ではないかもしれませんが、誰かが何らかの理由で考えることができるなら、私はこのように列挙型を使うべきではありません。とにかく、私の解決策は以下の通りで、複数の値などを追加することができます:

public enum ModelMapper 
{ 
Ford("Ford", "frd"), 
Renault("Renault", "rnlt"); 

private final String carAValue; 
private final String carBValue; 

ModelMapper(String carA_value, String carB_value) 
{ 
    carAValue = carA_value; 
    carBValue = carB_value;  
} 

public static String getCarAValue(String carB_value) 
{ 
    for (ModelMapper m: ModelMapper.values()) { 
     if (m.carBValue.equals(carB_value)) { 
      return m.carAValue; 
     } 
    } 
    throw new IllegalArgumentException(carB_value); 
} 
} 
1

マッピングコンストラクタのようなものを探しているようです。ある種のクラスのオブジェクトのコピーを作成するのに役立つ、よく知られているcopy constructorの概念があります。あなたの場合、別のクラスのインスタンスを与えられたあるクラスのインスタンスを作成したいとします。

enumsは、主にこの目的のために設計されていないため、この目的で使用することができます(または使用する必要があります)。

このような構造が非常に有用で(一般的な)ものであるかどうかは、あまり明確ではありません。たとえば、Carと指定してTurtleを作成しますか?それらの間にはあまり共通していないので、そのような施設を提供することはほとんど価値がないようです。 CarACarBの例をクラスとしていますが、2つの異なるクラスであるため完全に異なるものとみなされます。共通性は完全に偶然であるとみなされます。

この操作を外部化したいならば、あなたはJSONやXMLなどの形式でマッピングのためのシリアル化のいくつかの種類を使用して検討することと、その後1が関与するクラスのオブジェクトを作成するために、そのフォーマットの汎用的な処理を想像することができますが:この場合

<map from="CarA" to="CarB"> 
    <property>model</property> 
    <override>Ford</override> 
</map> 

、あなたはCarBのインスタンスを作成して、反射的マッピングに基づいて、その上にフィールドを設定します。他のすべてのフィールドがそのままコピーされていることを前提にすることができます。もちろん、一般的に有用であるためには、仕様のすべての詳細を洗い流す必要があります。

そうでなければ、その有用性が明らかに限定されているので、私が言及したif-else構成に間違いはありません。

関連する問題