gpt4 book ai didi

java - 不可变对象(immutable对象)的 null 和默认行为

转载 作者:行者123 更新时间:2023-11-29 04:32:39 25 4
gpt4 key购买 nike

使用 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(); 

谢谢!

最佳答案

此处提出类似问题: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 - 不可变对象(immutable对象)的 null 和默认行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43207743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com