0

オプションを含むクラスがありますMap

 private Optional<ImmutableMap<String, String>> stuff;

私のクラスコンストラクターでは、次Map<String, String> inputStuffの場所に渡されinputStuffます。

  • null
  • 空っぽMap
  • 人口の多いMap

最初の 2 つのインスタンスでは保存Optional.absent()する必要があり、3 番目のインスタンスOptionalではマップの不変のコピーを保存する必要があります。これを処理するという点で私が思いつくことができる最高のものは次のとおりです。

    final ImmutableMap<String, String> tmp = ImmutableMap.copyOf(Objects.firstNonNull(inputStuff, ImmutableMap.<String, String>of()));
    if (inputStuff.isEmpty())
    {
      this.stuff = Optional.absent();
    }
    else
    {
      this.stuff = Optional.of(inputStuff);
    }

これを処理するよりクリーンな方法はありますか?

4

2 に答える 2

8

なぜ単純にしないのですか:

if (inputStuff == null || inputStuff.isEmpty()) {
  this.stuff = Optional.absent();
} else {
  this.stuff = Optional.of(ImmutableMap.copyOf(inputStuff));
}

ここで一時変数を作成する理由がわかりません。三項演算子を使用したい場合は、 への割り当ての重複を避けることもできますthis.stuff

于 2013-09-14T10:18:22.453 に答える
1

私はこれで行きます:

this.stuff = (inputStuff == null || inputStuff.isEmpty()) 
   ? Optional.absent()
   : Optional.of(ImmutableMap.copyOf(inputStuff));

または@Xaerxessが投稿した方法。ここで何が起こっているのかを推測する方がはるかに簡単で簡単です。

于 2013-09-14T10:27:07.370 に答える