Использование https://immutables.github.io в моем приложении Java

Мой неизменный POJO:

@Value.Immutable
public interface AdditionalInfo {

  @Nullable
  @Value.Default
  default String getCountry() {
    return "US";
  }
}

Мой код, который создает POJO

ImmutableAdditionalInfo.builder().country(countryVar).build()

Если countryVar имеет значение null, getCountry вернет значение null. Мне кажется, что это противоречит интуитивному принципу, и по умолчанию лучше использовать его, если значение не может быть установлено. Я могу иметь нулевые проверки в коде приложения, которое создает AdditionalInfo, но это кажется неоптимальным.

if (countryVar != null) {
    ImmutableAdditionalInfo.builder().country(countryVar).build()
} else {
    ImmutableAdditionalInfo.builder().build()
}

Код, сгенерированный компоновщиком:

this.country = builder.countryIsSet() ? builder.country : AdditionalTaxLineInfo.super.getCountry(); 

В то время как то, что я хочу, это:

this.country = builder.countryIsSet() && builder.country != null ? builder.country : AdditionalTaxLineInfo.super.getCountry(); 

Спасибо!

1
Damo 4 Апр 2017 в 15:49

2 ответа

Лучший ответ

Вам необходимо использовать атрибуты Nullable.

Что-то вроде:

@Value.Immutable
public interface AdditionalInfo {

  @Nullable 
  @Value.Default
  default String getCountry() {
    return "US";
  }
}
1
Lital Kolog 4 Апр 2017 в 13:14