JDK1.8新特性值Optional
程序员文章站
2022-06-04 19:20:31
...
在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一
些防御式的检查,所以在代码中常常可见if(obj != null) 这样的判断。幸好在JDK1.8中,java为我们提供了
一个Optional类,Optional类能让我们省掉繁琐的非空的判断。下面先说一下Optional中为我们提供的方法
方法 | 描述 |
---|---|
of | 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException |
empty | 创建一个空的Optional对象 |
ofNullable | 把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional对象 |
get | 如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException |
orElse | 如果创建的Optional中有值存在,则返回此值,否则返回一个默认值 |
orElseGet | 如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值 |
orElseThrow | 如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常 |
filter | 如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象 |
map | 如果创建的Optional中的值存在,对该值执行提供的Function函数调用 |
flagMap | 如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象 |
isPresent | 如果创建的Optional中的值存在,返回true,否则返回false |
ifPresent | 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做 |
下面我们写几个例子来具体看一下每个方法的作用:
of
//创建一个值为张三的String类型的Optional
Optional<String> ofOptional = Optional.of("张三");
//如果我们用of方法创建Optional对象时,所传入的值为null,则抛出NullPointerException如下图所示
Optional<String> nullOptional = Optional.of(null);
ofNullable
//为指定的值创建Optional对象,如果传入的值为null,默认返回空的Optinal,不会报错
Optional<String> nullOptional = Optional.ofNullable(null);
Optional<String> nullOptional = Optional.ofNullable("lisi");
empty
//创建一个空的String类型的Optional对象
Optional<String> emptyOptional = Optional.empty();
get
//如果创建的Optional对象中有值存在则返回此值,如果没有值存在,则会抛出 NoSuchElementException异常
Optional<String> stringOptional = Optional.of("张三");
System.out.println(stringOptional.get());
orElse
//如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
Optional<String> stringOptional = Optional.of("张三");
System.out.println(stringOptional.orElse("zhangsan"));
Optional<String> emptyOptional = Optional.empty();
System.out.println(emptyOptional.orElse("李四"));
orElseGet
如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口的实现类生成的值
Optional<String> emptyOptional = Optional.empty();
System.out.println(emptyOptional.orElseGet(() -> {
String str = "name";
return str;
}));
上一篇: prometheus配置文件中的一些时间概念及名词解释
下一篇: HashMap