不可变对象的 null 和默认行为
null and default behaviour with immutables
在我的 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 为空,getCountry 将 return 为空。这对我来说似乎违反直觉,作为我的默认设置,最好在无法设置值时使用。
我可以在创建 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();
谢谢!
您需要使用Nullable attributes。
类似于:
@Value.Immutable
public interface AdditionalInfo {
@Nullable
@Value.Default
default String getCountry() {
return "US";
}
}
此处提出类似问题: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;
}
}
在我的 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 为空,getCountry 将 return 为空。这对我来说似乎违反直觉,作为我的默认设置,最好在无法设置值时使用。 我可以在创建 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();
谢谢!
您需要使用Nullable attributes。
类似于:
@Value.Immutable
public interface AdditionalInfo {
@Nullable
@Value.Default
default String getCountry() {
return "US";
}
}
此处提出类似问题: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;
}
}