如何使用番石榴将可能的空值转换为默认值?

2022-08-31 16:29:12

Guava 是否提供了一种方法来获取默认值,如果传递的对象引用是 ?我正在寻找类似的东西,如果obj是,则返回默认值null<T> T nullToDefault(T obj, T default)null

在stackoverflow上,我没有发现任何东西。我只是在寻找一种纯番石榴解决方案(如果有的话)!

我在Gauva 10 API中没有发现任何东西,只是看起来很有前途,但缺乏类似的东西。com.google.common.base.Objects


答案 1

除此之外,Guava 10.0还添加了Austable类作为此类问题的更通用的解决方案。Objects.firstNonNull

是可能包含也可能不包含值的内容。创建实例的方法有很多种,但对于您的情况,工厂方法是合适的。OptionalOptionalOptional.fromNullable(T)

获得 后,可以使用其中一种方法获取所包含的值(如果它包含值)或某个其他值(如果不包含值)。OptionalorOptional

把它们放在一起,你的简单例子是这样的:

T value = Optional.fromNullable(obj).or(defaultValue);

如果要将 a 用作默认值(因此除非必要,否则您不执行计算来获取它),或者如果要将多个可选值链接在一起以获取存在的第一个值,则可以获得额外的灵活性,例如:OptionalSupplier

T value = someOptional.or(someOtherOptional).or(someDefault);

答案 2

怎么样

MoreObjects.firstNonNull(obj, default)

请参阅 JavaDoc

(历史说明:该类曾经被称为,但它被重命名以避免与Java 7中引入的java.util.Objects类混淆。番石榴类现在实际上已被弃用。MoreObjectsObjectsObjects


推荐