网站首页 > 博客文章 正文
Optional类作用
Optional类被final修饰,是没有子类的工具类。主要作用就是为了避免null检查,防止空指针异常的作用。
以前对null的处理
对于字符串,传统的空指针问题解决方案:
String name = null;
if (name != null) {
System.out.println(name.length());
} else{
System.out.println("字符串为空!");
}
这样的写法显得很呆![吐舌]
创建方式Optional.of(T value)
Optional.of方法创建的Optional对象,不能传入null值。
// 通过of方法,of方法不支持null
Optional<String> op1 = Optional.of("zhangsan");
// NullPointerException
Optional<Object> op2 = Optional.of(null);
null值会报空指针异常,原因是调用了Objects.requireNonNull(value)。
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
创建方式Optional.ofNullable(T value)
Optional.of方法创建的Optional对象,支持传入null值。
// 通过ofNullable方法,支持传入null
Optional<String> op1 = Optional.ofNullable("zhangsan");
Optional<Object> op2 = Optional.ofNullable(null);
支持传入null值原因:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
Optional类解决空指针方案
传入User对象,获取userName属性值,有值把值转大写返回,无值返回空字符串。
public class Test {
public static void main(String[] args) {
User user1 = new User();
user1.setUserName("张三");
User user2 = new User();
User user3 = null;
System.out.println("user1 " + test(user1));
System.out.println("user2 " + test(user2));
System.out.println("user3 " + test(user3));
}
/**
* 传入User对象,获取userName属性值,
* 有值把值转大写返回,
* 无值返回空字符串。
*/
public static String test(User user) {
return Optional.ofNullable(user)
.map(User::getUserName)
.map(String::toUpperCase)
.orElse("");
}
}
字符串空值处理:
String str = null;
System.out.println(Optional.ofNullable(str).orElse(""));
猜你喜欢
- 2024-10-09 java.util.Optional学习笔记(java.util.collection)
- 2024-10-09 如何使用Java8 Optional防止空指针异常?开发者:咋不早告诉我呢
- 2024-10-09 Java8新特性-Stream流&Optional类
- 2024-10-09 Java 8 开始新增的 Optional 类 - 创建 Optional 对象
- 2024-10-09 「Java 8」巧用Optional之优雅规避NPE问题
- 2024-10-09 优雅地解决空指针异常问题:Java8新特性之Optional
- 2024-10-09 JDK8中新增的Optional工具类真的很好用哦,建议收藏
- 2024-10-09 还在重复写空指针检查代码?考虑使用 Optional 吧
- 2024-10-09 Java 8 开始新增的 Optional 类 - Optional 对象中的返回
- 2024-10-09 软件开发 | Java8超实用新特性之——Optional解决空指针问题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (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)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)