使用不可变

时间:2017-04-04 12:49:58

标签: java immutability

在我的Java App中使用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(); 

谢谢!

2 个答案:

答案 0 :(得分:2)

此处提出类似问题:https://github.com/immutables/immutables/issues/294

解决方案:

"CORRECT_STRING 1 abcd"
"field"
"part"
"CORRECT_STRING 100 xvfgfjskk"
"behind"
"CORRECT_STRING 4 afdgdg"
"CORRECT_STRING 9 ahj"
"CORRECT_STRING 12 gsgkkd"
"extract"
"CORRECT_STRING 108 hfjfj"
"CORRECT_STRING 21 y"

答案 1 :(得分:1)

您需要使用Nullable attributes

类似的东西:

@Value.Immutable
public interface AdditionalInfo {

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