Java 8新特性之Optional随笔

来源:互联网 发布:企业级sas软件多少钱 编辑:程序博客网 时间:2024/05/29 19:05

说实话,一开始看见java 8 的新特性的时候我没有关注到Optional这个类的使用,因为我用了一下觉得不怎么方便,但是在后面想起来有这个类的时候,我觉得它帮了我很多,于是就又认真的去看了一下它的API,觉得这个还是不错的一个容器对象类来的。

但是我们在什么时候去使用这个新的类呢?

那么我就来看看我们现在是怎么写的当String类型的值为null的时候,我们一般是怎么做的,很简单:

我们先来定义一个String类型的变量

String str = “hello”;

If(str==null){

System.out.println(“参数为空”);//或者是打印日志什么的

}else{

//执行我们的步骤

}

一开始的时候,我总是会忘记要判断传过来的参数是否为空,在这里也说一下:参数也早判断为空越好,这样我们就可以越早的解决问题。

然后我们来看看使用Optional容器包装类来处理这个问题,(在理解这个的时候,我觉得最好不要翻译,就直接的理解成Optional容器包装类,会好一点)

String str = “Hello”;

Optional<String> name =Optional.ofNullAble(str);

If(name.isPresent){

System.out.print(name.get());

} else{

System.out.println(“参数为空”);

}

看到这有人可能会说,这不是添加了很多行代码吗?那里看得出来提高效率了。是的,代码确实是多了很多,但是我们的可操作行也就提高了。为什么这么说呢?

我们来看看Optional的API函数先:

(1)      of:创建一个不能为null的Optional对象

(2)      ofNullAble:跟上面的一样的功能,唯一的区别就是可以为空

(3)      isPresent():判断Optioanl包装的内容是否有值,有返回true,没有false

(4)      ifPresent():一样的功能,相当于上面的添加了if判断语句,这个可以结合map来Lambda使用

(5)      get:得到Optional里面包装的对象

(6)      orElse:如果Optional里面的值不为null,则返回,不然返回我们自己定义的值

(7)      orElseGet:orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值。

(8)      orElseThrow:如果有值则将其返回,否则抛出supplier接口创建的异常

对于这个Optioanl包装容器类,我觉得了解这些就可以了,在开发中,如果不熟悉Lambda表达式的话,就多些使用of,ofNullAble,isPresent,如果还涉及到修改值内容,或者过滤等功能那个的话,就使用ifPresent这些,下面再看看一个例子把:

public class test {    public static void main(String[] args){        String user = "boy";        Optional<String> name = Optional.ofNullable(user);//        if(name.isPresent()){//            System.out.println(name.get());//        }else{//            System.out.println("name is null");//        }        name.ifPresent(x-> System.out.println("name is"+name.get()));        System.out.println(name.orElse("hello world"));        System.out.println(name.orElseGet(()->"good morning"));        name.orElseThrow(()->ValueNotExistException::new);    }}
好了,这个就介绍到这里,如果觉得复杂的话也可以不使用这个,不过我觉得这个还是挺好用的额。
0 0
原创粉丝点击