2016-05-15 11 views
2

に実行せずに可変引数と引数のペアを渡しますフィールドがありますが、通常は20ほどです)。あなたはそれが引数の2種類を伝えるために、引数の配置を使用しての悪いパターンを運ぶ見たようは、もともと私たちは以下のように構築されたオブジェクトを、持っていた悪いパターン

FieldSet set = FieldSet.getNewInstance(
     "stringField", "aaa", 
     "booleanField", Boolean.FALSE, 
     "intValue", new Integer(123)); 

:私たちは、このように使用することができます

public static FieldSet getNewInstance(Object... fieldPairs) { 

    ArrayList<Field> fields = new ArrayList<Field>(); 

    for (int i = 0; i < fieldPairs.length; i += 2) { 
     fields.add(new Field(fieldPairs[i].toString(), fieldPairs[i + 1])); 
    } 

    return new FieldSet(fields.toArray(new Field[fields.size()])); 
} 

:だから我々は、以下の方法を追加しました。

だから私は

  • はつまりはうんざりするほど
  • Fieldオブジェクトを何度も作成する必要が悪いパターンを回避回避、かなり簡潔な形で、ユーザーはFieldSetを構築することを可能にするという優れたパターンを見つけようとしています

    :、例えば、以下

上記一つとしてフィールドセットとフィールドの関連部分であります

注:私がここで提供したコードは、質問を最も簡単な形で示すために特別に作成されたものですので、他の非効率的な点に注意しないでください。配列とArrayListの間で前後に変換 - その問題は実際のコードの一部ではありません)

ありがとう!

+2

1は、それを使用することができますので、誰かが、二つの引数を受け取るメソッド 'addField'を持つBuilderパターンのようなものを発明するならばそれはとてもいいだろう'FieldSet'インスタンスを非常にクリーンな方法で構築します。とても素敵ですね。 – Tom

+0

@Tomこれは本当に良い提案です、なぜそれを回答として投稿しないのですか? –

+0

@AndreyMormysh彼はすでに私の力で邪魔を感じていたので。 ;-) – Andreas

答えて

6

オリジナルの方法は正しい方法です。それ以外の方法は、コンパイラの型チェックを失うか、使用するのが面倒です。

builderはオプションであるかもしれないけど。

FieldSet set = FieldSet.builder() 
     .add("stringField", "aaa") 
     .add("booleanField", Boolean.FALSE) 
     .add("intValue", new Integer(123)) 
     .build(); 
関連する問題