java.util.Optional类
1.理解:为了解决java中的空指针问题而生!
Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null
,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避
免空指针异常。
2.常用方法:
@Test public void test1(){ //empty():创建的Optional对象内部的value = null Optional<Object> op1 = Optional.empty(); if(!op1.isPresent()){//Optional封装的数据是否包含数据 System.out.println("数据为空"); } System.out.println(op1); System.out.println(op1.isPresent()); //如果Optional封装的数据value为空,则get()报错。否则,value不为空时,返回value. // System.out.println(op1.get()); } @Test public void test2(){ String str = "hello"; // str = null; //of(T t):封装数据t生成Optional对象。要求t非空,否则报错。 Optional<String> op1 = Optional.of(str); //get()通常与of()方法搭配使用。用于获取内部的封装的数据value String str1 = op1.get(); System.out.println(str1); } @Test public void test3(){ String str = "beijing"; str = null; //ofNullable(T t) :封装数据t赋给Optional内部的value。不要求t非空 Optional<String> op1 = Optional.ofNullable(str); //orElse(T t1):如果Optional内部的value非空,则返回此value值。如果 //value为空,则返回t1. String str2 = op1.orElse("shanghai"); System.out.println(str2);// }
3.典型练习:
能保证如下的方法执行中不会出现空指针的异常。
//使用Optional类的getGirlName(): public String getGirlName2(Boy boy){ Optional<Boy> boyOptional = Optional.ofNullable(boy); //此时的boy1一定非空 Boy boy1 = boyOptional.orElse(new Boy(new Girl("迪丽热巴"))); Girl girl = boy1.getGirl(); Optional<Girl> girlOptional = Optional.ofNullable(girl); //girl1一定非空 Girl girl1 = girlOptional.orElse(new Girl("古力娜扎")); return girl1.getName(); } @Test public void test5(){ Boy boy = null; boy = new Boy(); boy = new Boy(new Girl("苍老师")); String girlName = getGirlName2(boy); System.out.println(girlName); }