Optional 是 Java 8 引入的一个容器类,用于避免 NullPointerException,更优雅地处理“可能为空”的值。下面按常用程度介绍它的常用方法,并给出示例。
Optional.of(T value)非空值创建,如果 value 为 null 会抛异常。
Optional<String> opt = Optional.of("hello");
Optional.ofNullable(T value)允许为 null,最常用 ✅
Optional<String> opt = Optional.ofNullable(null);
Optional.empty()创建一个空的 Optional
Optional<String> opt = Optional.empty();
isPresent()判断是否有值
if (opt.isPresent()) {
System.out.println(opt.get());
}
ifPresent(Consumer)有值才执行(推荐替代 if)✅
opt.ifPresent(System.out::println);
get()获取值(不推荐随便用,可能抛异常)
String s = opt.get(); // 可能 NoSuchElementException
orElse(T other)为空时返回默认值(一定执行)
String s = opt.orElse("default");
orElseGet(Supplier)为空时才执行 Supplier(性能更好)✅
String s = opt.orElseGet(() -> "default");
orElseThrow(Supplier)为空时抛异常 ✅
String s = opt.orElseThrow(() -> new RuntimeException("null"));
map(Function)有值才转换
Optional<Integer> len = opt.map(String::length);
flatMap(Function)返回 Optional 时使用
Optional<String> result = opt.flatMap(s -> Optional.of(s.toUpperCase()));
filter(Predicate)条件不满足返回 empty
opt.filter(s -> s.length() > 3);
✅ 推荐
ofNullable + orElse / ifPresentOptional❌ 不推荐
get() 不判断如果你愿意,我也可以:
你想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。