java 基本语法(十九)Optional类的使用
2024-10-09 08:54:06
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); }
最新文章
- Mono为何能跨平台?聊聊CIL(MSIL)
- android给View设置边框 填充颜色 弧度
- 使用layer显示弹出框笔记
- Asp.net MVC1 学习1
- Django之Cookie
- vue.js随笔记---初识Vue.js
- createjs绘制扇形的方法
- 使用 OpenCV 与 Face++ 人脸识别
- [易飞]设置导入导出规则-小BUG
- Linux kernel的中断子系统之(四):High level irq event handler
- python3.7导入gevent模块报错的解决方案
- 大数据之NBA
- 优秀WordPress版微信小程序推荐(二)
- 解读使用Daisy-chain(菊花链)方式筛选一定范围内素数的代码
- ios 10 新特性
- vue ie
- [转载]Buffer cache的调整与优化
- mysql 函数模拟序列
- thinkphp Ajax表单提交
- zookeeper客户端连接报错
热门文章
- MySQL的LIKE模糊查询优化
- .NET Framework、.NET Core 和 .NET 5+ 的产品生命周期
- cb20a_c++_string类型的查找
- 微信小程序踩坑之前端问题处理篇
- Java容器:HashMap连环炮
- Mysql和Redis数据同步策略
- disruptor架构三 使用场景 使用WorkHandler和BatchEventProcessor辅助创建消费者
- 输入url后浏览器干了些什么(详解)
- Python3-configparser模块-配置文件解析器
- 关于html属性中onSubmit事件属性的使用