网站首页 > 资源文章 正文
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-28 Jdk14都要出了,还不能使用 Optional优雅的处理空指针?
- 2024-10-28 「Java8」 你有正确的使用 Optional吗?
- 2024-10-28 深入探讨 Pydantic 中的 Optional 和 Union 类型
- 2024-10-28 漫画:你居然不知道 Maven 中 Optional 和 Exclusions 的区别?
- 2024-10-28 Java8-关于Optional的那些事(关于java application)
- 2024-10-28 Jackson 中使用 Optional(jackson string to object)
- 2024-10-28 还在重复写空指针检查代码?考虑使用 Optional 吧
- 2024-10-28 jdk8的optional深入详解(jdk8 document)
- 2024-10-28 Java 中的 Optional(java optional.of)
- 2024-10-28 吃透 JAVA8 -- Optional 特性全部用法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)