以前在们在写代码的时候,是不是会碰到判断一个变量是否为空,需要写很多if判断,当Optional出来之后,可以用lamda表达式来代替if判断了,提高了对代码的整洁性,而且添加了当变量为null的,设置默认值的功能
现在介绍Optional(一个类):
包括3个静态方法:
1、empty (初始化一个Optional对象,但是不能get,否则会报错)
Optional optional = Optional.empty(); System.out.println(optional.get());
执行结果:
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at Main.main(Main.java:23)
2、of (把变量转变为optional对象,当变量为null的时候,则会抛异常)
String str = null; Optional optional = Optional.of(str); //报错 System.out.println(optional.get());
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at Main.main(Main.java:19)
3、ofNullable(把变量转变为optional对象,当变量为null的时候,get的时候则会抛异常)
String str = null; Optional optional = Optional.ofNullable(str); System.out.println(optional.get()); //报错
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at Main.main(Main.java:20)
4个主要的普通方法:
1、ifPresent (当变量不为空的时候,可以do something)
String str = "hello"; Optional optional = Optional.ofNullable(str); optional.ifPresent(x->{ System.out.println(x); //do something }); System.out.println(optional.get());
2、isPresent (判断变量是否为空)
String str = "hello"; String str1 = null; System.out.println(Optional.ofNullable(str).isPresent()); // ture System.out.println(Optional.ofNullable(str1).isPresent()); // false
3、orElse (当变量为空的时候,给变量设置默认值)
String str = "hello"; String str1 = null; System.out.println(Optional.ofNullable(str).orElse("world")); // hello System.out.println(Optional.ofNullable(str1).orElse("world")); // world
4、orElseGet 参数是实现Supplier接口的对象
String str = "hello"; String str1 = null; System.out.println(Optional.ofNullable(str).orElseGet(()->{ // hello String strIn = "world"; return strIn; })); System.out.println(Optional.ofNullable(str1).orElseGet(()->{ // world String strIn = "world"; return strIn; }));