Optional
概述
- Java 8开始引入的Optional类,主要解决的问题是空指针异常(NullPointerException)
使用
of()/ofNullable()
- of() 和 ofNullable() 方法创建包含值的 Optional。两个方法的不同之处在于如果你把 null 值作为参数传递进去,of() 方法会抛出 NullPointerException,ofNullable()不会
@Test(expected = NullPointerException.class)
public void run() {
User user=null;
Optional<User> opt = Optional.of(user);
}
@Test
public void run1(){
String name=null;
Optional<String> opt=Optional.ofNullable(name);
}
get()
- ptional 实例中取回实际值对象的方法之一是使用 get() 方法:
orElse() 和 orElseGet()
- 在对象为空的时候返回默认值。
- 如果它们接收的都是函数时,当不为空指针的情况下,orElse()仍会执行,而orElseGet()不会执行,类似懒加载原理。
@Test
public void run2(){
User user=null;
User user1=new User("langerfei@163.com");
User result=Optional.ofNullable(user).orElse(user1);
assertEquals("langerfei@163.com",result.getEmail());
}
@Test
public void run3(){
User user=null;
User result=Optional.ofNullable(user).orElseGet(()->createUser());
assertEquals("15363144@qq.com",result.getEmail());
}
@Test
public void run4(){
User user1=new User("langerfei@163.com");
User result=Optional.ofNullable(user1).orElse(user1);
assertEquals("langerfei@163.com",result.getEmail());
User result2=Optional.ofNullable(user1).orElseGet(()->createUser());
assertEquals("15363144@qq.com",result2.getEmail());
}
private User createUser(){
return new User("15363144@qq.com");
}