专业的编程技术博客社区

网站首页 > 博客文章 正文

java8新特性-Optional类(java8新特性在项目中实际应用)

baijin 2024-10-09 07:54:23 博客文章 6 ℃ 0 评论

这节介绍Optional类的常见用法及代码示例

定义:

Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题。

在该1.8版本之前,Google Guava引入了Optionals类来解决NullPointerException,

从而避免源码被各种null检查污染。

1 创建Optional对象实例

User user = new User();
user.setId(1L);
user.setUserName("tom”);

User nullUser = null;

// 应该明确对象不为 null 的时候使用 of()。
// 对象即可能是 null 也可能是非 null,你就应该使用 ofNullable()
Optional.of(user); // 输出 user
Optional.of(nullUser); // 会抛出 npe 异常

2 访问optional对象的值

Optional<User> userOptGet = Optional.ofNullable(user);
System.out.println(userOptGet.get()); // 获取对象
System.out.println(userOptGet.get().getUserName()); // tom

Optional<User> nullUserOptGet = Optional.ofNullable(nullUser);
try {
 nullUserOptGet.get(); // 空对象使用get()方法时,会抛出 No value present 异常
} catch (Exception e) {
 e.printStackTrace();
}

// 所以使用get方法时 先判空
nullUserOptGet.isPresent(); // true 对象存在,false 对象不存在
nullUserOptGet.ifPresent(user1 -> System.out.println("对象存在时输出1")); // 不会打印
userOptGet.ifPresent(user1 -> System.out.println("对象存在时输出2")); // 会打印

3 返回默认值

// 对象为空的时候,返回orElse()默认值
System.out.println(Optional.ofNullable(nullUser).orElse(user)); // 输出user

// 对象为空的时候,返回函数接口中返回的值
System.out.println(
 JSONObject.toJSONString(
 Optional.ofNullable(nullUser).orElseGet(() -> {
 User user2 = new User();
 user2.setId(2L);
 user2.setUserName("user2");
 return user2;
 })
 )
);


4 返回自定义异常

Optional.ofNullable(nullUser).orElseThrow(() -> new IllegalArgumentException());

这里会抛出 IllegalArgumentException。

可以决定抛出什么样的异常,而不总是抛出 NullPointerException


5 map(Function f)

// 获取用户名 没有值时 返回 "默认用户名"
Optional<User> op = Optional.ofNullable(user);
String str = op.map(e -> e.getUserName()).orElse("默认用户名");
System.out.println(str);

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表