Более сжатый код для защитной копии с использованием неизменяемых типов Guava? - PullRequest
0 голосов
/ 10 июля 2020

Я хочу сделать защитную копию коллекции, переданной в метод с использованием неизменяемых типов Guava, например ImmutableList. Я также должен иметь возможность обрабатывать null ввод и обрабатывать его как пустую коллекцию.

Самым чистым, что я мог придумать, было следующее:

  public void setStrings(List<String> strings) {
     this.strings = strings == null ? ImmutableList.of() : ImmutableList.copyOf(strings);
  }

Есть ли что-то более читаемое , желательно без тернарного оператора? Я бы не стал рассматривать Optional.of(strings).map(...).orElse(...) как хорошую альтернативу из-за аргументов, которые я разделяю с этим ответом .

1 Ответ

1 голос
/ 10 июля 2020

Вы можете использовать MoreObjects.firstNonNull, который также принадлежит Guava:

public void setStrings(List<String> strings) {
     this.strings = ImmutableList.copyOf(MoreObjects.firstNonNull(strings, Collections.emptyList()));
}

В качестве альтернативы ListUtils.emptyIfNull - аналогичный, но более специализированный метод в Apache Коллекции Commons, которые, на мой взгляд, более понятны и легче читаются:

public void setStrings(List<String> strings) {
     this.strings = ImmutableList.copyOf(ListUtils.emptyIfNull(strings));
}
...