Optional 容器类:用于尽量避免空指针异常
Optional.of(T t) : 创建一个 Optional 实例
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
isPresent() : 判断是否包含值
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
flatMap(Function mapper):与 map 类似,要求返回值必须是Optional
@Test public void test06(){ Optional<Student> op=Optional.ofNullable(null);
Optional<Integer> map = op.flatMap((e)->Optional.of(e.getAge()));
System.out.println(map);//Optional.empty Optional<Student>
op1=Optional.ofNullable(null); Optional<Integer> map1 =
op1.flatMap((e)->Optional.of(e.getAge()));
System.out.println(map1.orElse(12));//12 } @Test public void test05(){
Optional<Student> op=Optional.ofNullable(null); Optional<Integer> map =
op.map((e)->e.getAge()); System.out.println(map);//Optional.empty
Optional<Student> op1=Optional.ofNullable(new Student("丽丽")); Optional<String>
map1 = op1.map((e)->e.getName()); System.out.println(map1);//Optional[丽丽] }
@Test public void test04(){ Optional< Student> op=Optional.ofNullable(new
Student("王丽")); Student orElseGet = op.orElseGet(()->{ Student s=new
Student("莉莉",12,"ss"); return s; }); System.out.println(orElseGet);//Student
[getName()=王丽, getAge()=0, getSex()=null] Optional< Student>
op2=Optional.ofNullable(null); Student orElseGet2 = op2.orElseGet(()->{ Student
s=new Student("莉莉",12,"ss"); return s; });
System.out.println(orElseGet2);//Student [getName()=莉莉, getAge()=12,
getSex()=ss] } @Test public void test03(){ Student s=null; Optional<Student>
op2 = Optional.ofNullable(s); System.out.println("op2==="+op2.isPresent());
if(!op2.isPresent()){ System.out.println(op2.orElse(new Student())); } /** *
Student [getName()=null, getAge()=0, getSex()=null] */ } @Test public void
test02(){ Student s=null; Optional<Student> op1 = Optional.ofNullable(s);
//System.out.println(op1.get());//null System.out.println(op1.orElse(new
Student())); } @Test public void test01(){ Optional<Student> of =
Optional.of(new Student()); System.out.println("op"+of.get()); } 总结
:使用Optional能更好避免空指针的出现,虽然说还得写代码进行判断,但无疑这个容器类可以使我们少写if,else,增强了代码可读性(讲真if我是不喜欢的),和Lambda也可以在一起使用,在进行复杂自定对象获取做默认的时候也简化了代码。
技术
今日推荐