网站首页 > 资源文章 正文
Optional是什么
java.util.Optional
Jdk8提供Optional
,一个可以包含null值的容器对象,可以用来代替xx != null的判断。
Optional常用方法
of
public static <T> Optional<T> of(T value) { return new Optional<>(value); }
为value创建一个Optional对象,如果value为空则 会报出NullPointerException异常。
ofNullable
public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); }
为value创建一个Optional对象,但可以允许value为null值。
isPresent
public boolean isPresent() { return value != null; }
判断当前value是否为null,如果不为null则返回true,否则false。
ifPresent
如果不为null值就执行函数式接口的内容。
public void ifPresent(Consumer<? super T> consumer) { if (value != null) consumer.accept(value); }
get
public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; }
返回当前的值,如果为空则报异常。
orElse
返回当前值,如果为null则返回other。
public T orElse(T other) { return value != null ? value : other; }
orElseGet
orElseGet和orElse类似,只是orElseGet支持函数式接口来生成other值。
public T orElseGet(Supplier<? extends T> other) { return value != null ? value : other.get(); }
orElseThrow
如果有值则返回,没有则用函数式接口抛出生成的异常。
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X { if (value != null) { return value; } else { throw exceptionSupplier.get(); } }
示例
public static void main(String[] args) { testOf(); testNullable(); } private static void testNullable() { User user = null; User john = new User("john", 18); User dick = new User("dick", 12); System.out.println(Optional.ofNullable(user).orElse(john)); System.out.println(Optional.ofNullable(john).get()); System.out.println(Optional.ofNullable(dick).orElse(john)); System.out.println(Optional.ofNullable(user).orElseGet(() -> john)); System.out.println(); } private static void testOf() { try { User user1 = new User(); Optional<User> userOptional1 = Optional.of(user1); if (userOptional1.isPresent()) { System.out.println("user is not null"); } User user2 = null; Optional<User> userOptional2 = Optional.of(user2);//NullPointerException if (userOptional2.isPresent()) { System.out.println("user is not null"); } } catch (Exception e) { e.printStackTrace(); } System.out.println(); }
Optional
在jdk8中有大量使用,比如像Stream流中,但Optional
用在null判断感觉也没什么鸟用。。
在Spring4中也可以用Optional来代替autowired(require=false)的情况,参考历史Spring系列文章。
推荐书籍
Spring Cloud微服务实战
JavaEE开发的颠覆者 Spring Boot实战
SpringBoot揭秘 快速构建微服务体系
SpringBoot实战
精通Spring+4.x++企业应用开发实战
获取所有高清电子书下载请到274435854群。
看完有没有收获?分享到朋友圈给更多的人吧。
架构之路,头条精选,每天一篇干货,喜欢就收藏+关注吧!
猜你喜欢
- 2024-10-28 java新特性之Optional类介绍,解决空指针问题的终极类
- 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)
你 发表评论:
欢迎- 最近发表
-
- 涨知识!电脑键盘上F1到F12的正确用法,你都会用吗?
- Win10《邮件》应用0x80070032错误:已发送邮件不同步
- 微软邮件服务系统出现大规模收发错误 预计24小时内修复
- Outlook365邮箱崩溃,备份邮箱,配置邮箱,还原数据
- Outlook服务瘫痪故障加重 微软遭遇的网络问题开始影响全球用户
- outlook邮箱报错:无法打开此文件夹集合pst文件错误
- 微软确认新版Windows Outlook支持在无互联网的情况下运行
- 用户隐私成隐忧,欧盟封锁微软 Outlook App
- 微软承认 Outlook 存在问题,会导致Exchange Online邮箱配置错误
- 如何在 Outlook 中撤回电子邮件(outlook怎么撤回邮箱)
- 标签列表
-
- 电脑显示器花屏 (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)
本文暂时没有评论,来添加一个吧(●'◡'●)