java nonnull_java – Objects :: nonNull和x – x!= null之间有什么区别吗?
考虑以下课程:
import java.util.Objects;
import java.util.function.Predicate;
public class LambdaVsMethodRef {
public static void main(String[] args) {
Predicate a = Objects::nonNull;
Predicate b = x -> x != null;
}
}
第一个谓词是从方法引用创建的,另一个是lambda表达式.这些谓词具有相同的行为(nonNull的主体只是返回obj!= null;). lambda短两个字符(可能允许流管道适合一行).
除了代码风格,Objects :: nonNull和x – >之间有什么区别吗? x!= null?换句话说,我应该更喜欢一个吗?
lambda-dev和lambda-libs-spec- {观察者,专家}邮件列表消息提到isNull,nonNull和isNotNull(早期名称)没有解决这一点. (我很惊讶没有人质疑添加Objects方法,因为它们可以用lambda轻松替换,但另一方面,Integer :: sum也是如此.)
我还用javap查看了字节码.唯一的区别是传递给lambda metafactory bootstrap method的方法句柄:
BootstrapMethods:
0: #16 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#17 (Ljava/lang/Object;)Z
#18 invokestatic java/util/Objects.nonNull:(Ljava/lang/Object;)Z
#17 (Ljava/lang/Object;)Z
1: #16 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
Method arguments:
#17 (Ljava/lang/Object;)Z
#20 invokestatic LambdaVsMethodRef.lambda$main$1:(Ljava/lang/Object;)Z
#17 (Ljava/lang/Object;)Z
当然,对于方法引用和lambdas来说,元数据可以在JVM的奇思妙想中做不同的事情,所以这并不是很有效.
java nonnull_java – Objects :: nonNull和x – x!= null之间有什么区别吗?相关推荐
- java client是什么_“java-server”和“java-client”之间的真正区别?
慕村9548890 在早期版本的Java中,最明显的直接区别是分配给-client相对于-server申请.例如,在我的Linux系统上,我得到:$ java -XX:+PrintFlagsFinal ...
- java obervable_RxJava中Observable,Completable和Single之间有什么区别
Observable 是通用ReactiveX构建块,它是随时间发送值的事件源 . (因此存在ReactiveX扩展到的每种语言) 简而言之,Observable事件是: onNext *(onCom ...
- 教妹学Java(六):JDK,JRE和JVM之间有什么区别?
大家好,我是沉默王二.本篇文章通过我和三妹的对话来谈一谈"JDK,JRE 和 JVM 之间的区别".本文付费,为表谢意,附送上个人微信(qing_gee),坑位所剩无几,快加,你有 ...
- java servlet 3_java – Servlet 2.5和3之间有什么区别?
更新 正如一个更新和更明确,这些是servlet 2.5和3之间的主要区别(我不想穷举,我只是提到最有趣的部分): 声明servlet,过滤器和监听器的注释(易于开发) 在servlets 2.5中, ...
- 【Java】java.util.Objects 工具类方法研究
[Java]java.util.Objects 工具类方法研究 Objects 与 Object 区别 Object 是 Java 中所有类的基类,位于java.lang包. Objects 是 Ob ...
- Java中Objects类的方法介绍(已更新)
使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...
- java.util.Objects 简介
java.util.Objects 类 包含了几个静态方法,可以实现对对象的比较.生成hash code之类的功能, 很多方法里考虑了对象是null的情况,在输入的参数是null时有特定的处理方式. ...
- 报错提示:java.lang.IllegalArgumentException: Target must not be null
报错提示: org.springframework.web.util.NestedServletException: Request processing failed; nested excepti ...
- Java报异常时getMessage()方法返回null
Java报异常时getMessage()方法返回null 参考文章: (1)Java报异常时getMessage()方法返回null (2)https://www.cnblogs.com/runnin ...
最新文章
- 在Xcode中使用Git进行源码版本控制
- Vue-Cli3.0怎么使用预渲染怎么配置prerender-spa-plugin
- 【学习笔记】项目Leader如何成长
- 触发器及其应用实验报告总结_调机技巧总结: 先快后慢射胶法及其应用
- vue项目前端服务器,【前端技术】vue自动部署项目到服务器
- 安装完SqlServer2008,wamp服务器无法启动的问题
- 栈的链式存储结构及实现
- Recoll:Unix和Linux桌面的文本搜索工具
- python异常处理与上下文管理器
- poj 3304 Segments
- linux每个任务运行时间,Linux基础教程:任务计划和周期性任务
- Arduion 底层原理之 Uart函数 串口收发 串口协议解析
- 类似铸剑物语的java游戏_怀旧向:GBA上的10款经典RPG游戏推荐,这些你都玩过吗?...
- [异能程序员]第三章 异能初现(第三更)
- linux音频函数接口,Linux音频驱动-OSS和ALSA声音系统简介及其比较
- FPGA Vivado AXI _DMA IP介绍
- 第十六篇 晶体管之电流放大器
- Java实现找零问题
- 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频
- [EGNN] Exploiting Edge Features for Graph Neural Networks 利用图神经网络的边特征 论文详解 CVPR 2019
热门文章
- mybatis-plus分页插件(PaginationInnerInterceptor)报错的问题
- 店商+电商 BC一体化赋能传统品牌商数字化转型升级
- C语言(按位与)、|(按位或)、^(按位异或)运算操作符讲解
- 再介绍一款 windows7 瘦身软件介绍: windows 冗余文件清理工具
- 蛛网时代:我们不一样!BI工具中的创新者
- 新版福昕阅读器自定义注释功能快捷键
- 基金跌了怎么办?来听听大咖教你怎么做!
- .NET 5.0正式发布,功能特性介绍(翻译)(转载)
- linux通过nfs挂载根文件系统报错:VFS: Unable to mount root fs via NFS, trying floppy
- vue 组件不受全局样式影响_Vue 组件之间样式冲突