使用Guava标准化丑陋的方法参数

时间:2013-09-14 09:32:12

标签: java guava

我有一个包含可选Map

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

在我的类构造函数中,我传递了Map<String, String> inputStuff,其中inputStuff可能是:

  • null
  • Map
  • 已填充的Map

对于前两个实例,我需要存储Optional.absent(),对于第三个实例,我需要存储一个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);
    }

有没有更简洁的方法来处理这个问题?

2 个答案:

答案 0 :(得分:9)

为什么不简单地做:

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

我没有看到为什么要在这里创建临时变量的原因。如果您更喜欢使用三元运算符,甚至可以避免重复分配给this.stuff

答案 1 :(得分:2)

我会这样做:

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

或@Xaerxess发布它的方式。它更直接,更容易猜到这里发生了什么。