Optional
是 Java 8 引入的一个容器对象,用于表示一个值存在或不存在。它可以用来避免空指针异常(NullPointerException
),并使代码更加清晰和安全。
Optional
可以使代码意图更加明确,减少冗长的 if-else
检查。Optional
提供了一些函数式方法,如 map
、flatMap
、filter
和 orElse
,使得代码更加简洁和易读。Optional
有两种类型:
Optional<T>
:表示一个值可能存在也可能不存在。OptionalInt
、OptionalLong
、OptionalDouble
:分别表示基本数据类型的可选值。当需要处理可能为空的值时,可以使用 Optional
。例如,从数据库查询数据、从外部API获取数据等。
假设我们有一个方法 findUserById
,它可能返回一个用户对象或 null
:
public class User {
private String name;
// getters and setters
}
public class UserService {
public User findUserById(int id) {
// 模拟从数据库查询用户
return null; // 或者返回一个 User 对象
}
}
使用 Optional
重写 if-else
检查:
public class UserService {
public Optional<User> findUserById(int id) {
// 模拟从数据库查询用户
User user = null; // 或者返回一个 User 对象
return Optional.ofNullable(user);
}
public void printUserName(int id) {
Optional<User> optionalUser = findUserById(id);
String userName = optionalUser.map(User::getName).orElse("Unknown");
System.out.println("User name: " + userName);
}
}
Optional.ofNullable(user)
:将可能为空的 user
包装成 Optional
对象。optionalUser.map(User::getName)
:如果 optionalUser
存在,则调用 User::getName
方法获取用户名,并将其包装成新的 Optional
对象。orElse("Unknown")
:如果 optionalUser
不存在,则返回默认值 "Unknown"
。通过这种方式,我们可以避免显式的 if-else
检查,使代码更加简洁和安全。
领取专属 10元无门槛券
手把手带您无忧上云