gpt4 book ai didi

java - 在 Java 中安全地从长对象转换为长原语的惯用方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:43 42 4
gpt4 key购买 nike

我试图将一个 Long 对象值传递给一个需要 long 原语的方法,直接传递有效,但 Long 对象为 null 的情况除外。在这种情况下,我得到一个空指针异常。

Long foo=null;
bar.methodExpects_long_primitive(foo);

我可以创建一个检查 foo 是否为 null 并跳过调用该方法,例如

Long foo=null;
if(foo!=null){
bar.methodExpects_long_primitive(foo);
}

或者如果我想提供一个默认值

Long foo=null;
bar.methodExpects_long_primitive(foo==null?defaultValue:foo);

是否有一种优雅/更好的方法来做到这一点?我必须在代码库中多次重复此操作,这样做似乎会添加很多条件。

我可以创建自己的方法来执行此操作,但我想知道是否已经有任何此类库方法。

最佳答案

从 Java 8 开始,一种选择是将 Long 包装在 java.util.Optional 中.尽可能传递这个而不是 Long。当你必须得到一个 long 值时,你可以使用 Optional.orElse() 提供一个默认值:

Long foo = null;

Optional<Long> optFoo = Optional.ofNullable( foo );
long longFoo = optFoo.orElse( -1L );

System.out.println( longFoo );

或者您可以使用 Optional.empty() 测试 Optional 是否持有一个值:

    Long foo = null;

Optional<Long> optFoo = Optional.ofNullable( foo );
if ( ! optFoo.empty() ) {
long longFoo = optFoo.get();

System.out.println( longFoo );
}

这种方法的一个很好的副作用是很明显,无论您在何处传递 Optional,该值都可能为 null。另一个是当值为 null 时尝试调用 get() 将立即抛出异常。

在 Java 8 之前,您可以使用 Google 的 guava 库,它提供了一个非常相似的类 com.google.common.base.Optional .

关于java - 在 Java 中安全地从长对象转换为长原语的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983242/

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