网站首页 > 博客文章 正文
Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象。它的作用主要就是为了解决避免Null检查,防止NullPointerException。
// 以前对null的处理方式
@Test
public void test01() {
String userName = "凤姐";
if (userName != null) {
System.out.println("姓名为: " + userName);
} else {
System.out.println("姓名不存在");
}
}
Optional基本使用
@Test
public void test02() {
// 1.创建Optional对象
// of:只能传入一个具体值,不能传入null
// ofNullable: 既可以传入具体值,也可以传入null
// empty: 存入的是null
Optional<String> op1 = Optional.of("凤姐");;
Optional<String> op2 = Optional.ofNullable("如花");
Optional<String> op5 = Optional.ofNullable("如花");
Optional<Object> op3 = Optional.empty();
// 2.isPresent: 判断Optional中是否有具体值, 有值返回true,没有值返回false
boolean present = op1.isPresent();
System.out.println("present = " + present);
// 3.get: 获取Optional中的值,如果有值就返回值具体值,没有值就报错
//System.out.println(op3.get());
if (op1.isPresent()) {
System.out.println(op1.get());
} else {
System.out.println("没有值");
}
}
Optional高级使用
Optional<String> userNameO = Optional.of("凤姐");
// 存在做的什么
//ifPresent: 如果有值就调用参数
userNameO.ifPresent(s -> {
System.out.println("有值: " + s);
});
定义一个方法将User中的用户名转成大写并返回
// 使用传统方式
public String getUpperUserName1(User u) {
if (u != null) {
String userName = u.getUserName();
if (userName != null) {
return userName.toUpperCase();
} else {
return null;
}
} else {
return null;
}
}
使用Optional方式
public String getUpperUserName2(Optional<User> op) {
String upperName = op.map(User::getUserName)
.map(String::toUpperCase)
.orElse("null");
return upperName;
}
猜你喜欢
- 2024-11-03 Java Lambda从入门到精通之二十二Optional类
- 2024-11-03 java8,你应该了解的新特性(空指针终结者:Optional 类)
- 2024-11-03 Java Optional使用指南(java.util.optional)
- 2024-11-03 Java 8 Optional 最佳指南(java中optional)
- 2024-11-03 「Java8实战」使用Optional取代null
- 2024-11-03 Java8新特性:Optional 类(java options类)
- 2024-11-03 惊了,JDK都到23了,据说还有99%Java程序员都不会用optional?
- 2024-11-03 还在用if(obj!=null)做非空判断?带你快速上手Optional实战
- 2024-11-03 JDK8中新增的Optional工具类真的很好用哦,建议收藏
- 2024-11-03 Java8新特性之空指针异常的克星Optional类
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)