我试图将Long对象值传递给期望长基元的方法,直接传递除了Long对象为空的情况之外.在这种情况下,我得到一个空指针异常.
Long foo=null;
bar.methodExpects_long_primitive(foo);
Run Code Online (Sandbox Code Playgroud)
我可以创建一个检查,如果foo为null并跳过调用方法,就像
Long foo=null;
if(foo!=null){
bar.methodExpects_long_primitive(foo);
}
Run Code Online (Sandbox Code Playgroud)
或者如果我想提供默认值
Long foo=null;
bar.methodExpects_long_primitive(foo==null?defaultValue:foo);
Run Code Online (Sandbox Code Playgroud)
是否有优雅/更好的方法来做到这一点?我必须在代码库中重复多次这样做,这样做似乎增加了很多条件.
我可以创建自己的方法来执行此操作,但我想知道是否已有任何此类库方法.
从 Java 8 开始,一种选择是将 Long 包装在java.util.Optional中。只要有可能,就传递这个而不是 Long。当您必须获取长值时,您可以提供默认值Optional.orElse():
Long foo = null;
Optional<Long> optFoo = Optional.ofNullable( foo );
long longFoo = optFoo.orElse( -1L );
System.out.println( longFoo );
Run Code Online (Sandbox Code Playgroud)
或者您可以测试Optional是否具有以下值Optional.empty():
Long foo = null;
Optional<Long> optFoo = Optional.ofNullable( foo );
if ( ! optFoo.empty() ) {
long longFoo = optFoo.get();
System.out.println( longFoo );
}
Run Code Online (Sandbox Code Playgroud)
这种方法的一个很好的副作用是,很明显,无论您在何处传递可选值,该值都可能为空。另一个是当值为 null 时尝试调用 get() 将立即抛出异常。
在 Java 8 之前,您可以使用 Google 的 guava 库,它提供了一个非常相似的类com.google.common.base.Optional。
| 归档时间: |
|
| 查看次数: |
8963 次 |
| 最近记录: |