一、Optional 类
1、概述
- Optional 类主要是处理空指针问题
2、传统方式处理空指针
package com.my.optional;
public class NullHandleTest {
public static void main(String[] args) {
String username = null;
if (username != null) {
System.out.println("字符串的长度为 " + username.length());
} else {
System.out.println("字符串为空");
}
}
}
二、Optional 类基本使用
1、创建 Optional 对象
(1)静态方法 of
创建 Optional 对象,不支持 null
Optional<String> op1 = Optional.of("tom");
System.out.println(op1);
(2)静态方法 ofNullable
- 创建 Optional 对象,支持 null
Optional<String> op2 = Optional.ofNullable("jack");
System.out.println(op2);
Optional<Object> op3 = Optional.ofNullable(null);
System.out.println(op3);
(3)静态方法 empty
- 创建空的 Optional 对象
Optional<Object> op4 = Optional.empty();
System.out.println(op4);
2、常用方法
(1)get 方法
- 返回 Optional 对象中的值,如果没有值,则抛出异常(java.util.NoSuchElementException)
Optional<String> optional = Optional.ofNullable("jack");
System.out.println(optional.get());
(2)isPresent 方法
- 判断是否包含值
Optional<String> optional = Optional.ofNullable("jack");
System.out.println(optional.isPresent());
(3)orElse 方法
- Optional 对象中有值则返回该值,如果没有值,则返回 orElse 方法中指定的值
Optional<String> optional = Optional.ofNullable("jack");
Optional<Object> nullOptional = Optional.ofNullable(null);
System.out.println(optional.orElse("Hello World"));
System.out.println(nullOptional.orElse("Hello World"));
(4)orElseGet 方法
- Optional 对象中有值则返回该值,如果没有值,则返回 orElseGet 方法中 Lambda 表达式的返回值
Optional<String> optional = Optional.ofNullable("jack");
Optional<Object> nullOptional = Optional.ofNullable(null);
System.out.println(optional.orElseGet(() -> "Hello World"));
System.out.println(nullOptional.orElseGet(() -> "Hello World"));
(5)orElseThrow 方法
- Optional 对象中有值则返回该值,如果没有值,则返回 orElseThrow 方法中 Lambda 表达式抛出的异常
Optional<String> optional = Optional.ofNullable("jack");
Optional<Object> nullOptional = Optional.ofNullable(null);
System.out.println(optional.orElseThrow(() -> new RuntimeException("返回值为空")));
System.out.println(nullOptional.orElseThrow(() -> new RuntimeException("返回值为空")));
(6)ifPresent 方法
- Optional 对象中有值,则进行相关操作
Optional<String> optional = Optional.ofNullable("jack");
optional.ifPresent(s -> {
System.out.println(s + "Hello");
});
(7)map 方法
- 将 Optional 对象中的值进行类型转换,如果值不存在,则抛出异常(java.util.NoSuchElementException)
Optional<String> numOptional = Optional.ofNullable("123");
Integer num = numOptional.map(s -> Integer.parseInt(s)).get();
System.out.println(num);