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); }

最新文章

  1. Mono为何能跨平台?聊聊CIL(MSIL)
  2. android给View设置边框 填充颜色 弧度
  3. 使用layer显示弹出框笔记
  4. Asp.net MVC1 学习1
  5. Django之Cookie
  6. vue.js随笔记---初识Vue.js
  7. createjs绘制扇形的方法
  8. 使用 OpenCV 与 Face++ 人脸识别
  9. [易飞]设置导入导出规则-小BUG
  10. Linux kernel的中断子系统之(四):High level irq event handler
  11. python3.7导入gevent模块报错的解决方案
  12. 大数据之NBA
  13. 优秀WordPress版微信小程序推荐(二)
  14. 解读使用Daisy-chain(菊花链)方式筛选一定范围内素数的代码
  15. ios 10 新特性
  16. vue ie
  17. [转载]Buffer cache的调整与优化
  18. mysql 函数模拟序列
  19. thinkphp Ajax表单提交
  20. zookeeper客户端连接报错

热门文章

  1. MySQL的LIKE模糊查询优化
  2. .NET Framework、.NET Core 和 .NET 5+ 的产品生命周期
  3. cb20a_c++_string类型的查找
  4. 微信小程序踩坑之前端问题处理篇
  5. Java容器:HashMap连环炮
  6. Mysql和Redis数据同步策略
  7. disruptor架构三 使用场景 使用WorkHandler和BatchEventProcessor辅助创建消费者
  8. 输入url后浏览器干了些什么(详解)
  9. Python3-configparser模块-配置文件解析器
  10. 关于html属性中onSubmit事件属性的使用