java8新特性Optinal的作用是什么
本篇内容主要讲解"java8新特性Optinal的作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java8新特性Optinal的作用是什么"吧!
空指针异常可能占据了一半的异常发生率。于是oracle想用optional这类'优雅的'解决null。想象挺美好,现实很残酷。显然optional并没有使代码变得那么优雅。看了七八篇大神的博客,不管从代码量或者代码思想上都没有什么质的改变,你仍然要时刻担心null的出现及给它相应的处理。如果你想统一处理还不如直接代码try catch 空指针异常。在我发现它真正对代码的改善前,暂且不推荐(不过阿里推荐,还是人家牛,听阿里的吧)
更新------------------------------------------------------
本着求真务实的精神,今天更加详细分析一下optional的使用方法。(根据实际开发,理论玩家无视)。
1,首先是构造方法 Optional.of(), Optional.ofNullable() ,Optional.empty()。
Optional.of():of方法在传入的参数为null时,抛出空指针异常。许多博客都说要在确定参数不为null时使用。可要是确定参数不为null,为什么要用Optional。个人观点,Optional,的所有方法中,可能会抛出空指针异常的,都违背了使用Optional的初衷。如get()方法。
Optional.empty():构造一个空值值 optional,非特殊情况无使用价值。默认就使用ofNullable()方法构造。
2,各方法的使用
①isPresent() 根据是否为空返回boolean。一个挖坑又填坑的方法。直接判断参数==null?不好吗。
②ifPresent(Consumer) 在对象不为空时,执行Consumer(函数表达式),空时不执行。相当于if(obj==null){.....},的简便写法。你可能会说这也没什么大用啊,我的硬盘又不在乎多一行代码,再想写个else都不行。这个。。。。你说的对。 但这已经是Optional中比较有用的方法了。
③get() 获取optional中的值,空则抛出异常。前面说了,这个方法看不出来使用价值
④orElse(T other) 如果为空,用other替代。同样可用一行if替代。但你可用来装一下
⑤orElseThrow 如果为空抛出异常。不想评价它
⑥map 如果你从一个对象中想得到第若干层的子对象,每一层都要都要空值校验如,Obj=obj1.get("obj2").get("obj3").get("obj4");上一个get方法返回的值为null时,下一个get方法执行时都会抛异常。于是就要写若干层if。map则允许进行链式操作,在最后才处理null值。这是optional最值得使用的方法。
Optional.ofNullable(userEntity1).map(u -> u.getUsername()) .map(name -> name.toUpperCase()).orElse(null);
到此,相信大家对"java8新特性Optinal的作用是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!