总结于尚硅谷学习视频
https://www.bilibili.com/video/BV1Kb411W75N?p=685
代码
OptionalTest类
package com.day0330_1; import org.junit.jupiter.api.Test; import java.util.Optional; /** * 为了在程序中避免出现空指针异常而创建的 * * 常用的方法:ofNullable(T t) * orElse(T t) */ public class OptionalTest { /* Optional.of(T t):创建一个Optional实例,t必须非空 Optional.empty():创建一个空的Optional实例 Optional.ofNullable(T t):t可以为null */ @Test public void test1(){ Girl girl = new Girl(); girl=null;//NullPointerException //of(T t):保证t是非空的 Optional<Girl> optionalGirl = Optional.of(girl); } @Test public void test2(){ Girl girl = new Girl(); girl=null;//NullPointerException // ofNullable(T t):t可以为null Optional<Girl> optionalGirl = Optional.ofNullable(girl); System.out.println(optionalGirl); //orElse(T t1):如果单前的Optional内部封装的t是非空的,则返回内部的t //如果内部的t是空的,则返回orElse()方法的参数t1. Girl girl1 = optionalGirl.orElse(new Girl("赵丽颖")); System.out.println(girl1); } public String getGirlName(Boy boy){ return boy.getGirl().getName(); } @Test public void test3(){ Boy boy=new Boy(); boy=null; String girlName=getGirlName(boy); System.out.println(girlName); } //优化以后的getGirlName(): public String getGirlName1(Boy boy){ if (boy!=null) { Girl girl = boy.getGirl(); if (girl != null){ return girl.getName(); } } return null; } @Test public void test4(){ Boy boy=new Boy(); boy=null; String girlName=getGirlName1(boy); System.out.println(girlName); } //使用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); } }
Boy类
package com.day0330_1; public class Boy { private Girl girl; public Boy() { } public Boy(Girl girl) { this.girl = girl; } public Girl getGirl() { return girl; } public void setGirl(Girl girl) { this.girl = girl; } @Override public String toString() { return "Boy{" + "girl=" + girl + '}'; } }
Girl类
package com.day0330_1; public class Girl { private String name; public Girl() { } public Girl(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Girl{" + "name='" + name + '\'' + '}'; } }