在我的Java应用程序中使用https://immutables.github.io

我不变的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();


谢谢!

最佳答案

在这里问类似的问题:https://github.com/immutables/immutables/issues/294

解:

@Value.Immutable
public abstract class AdditionalInfo  {
    abstract @Nullable String getCountry();

    public String getCountryCanonical() {
      return getCountry != null ? getCountry : DEFAULT_VALUE;
}
}

10-04 19:31