「Java」我是不会换java14的!不,你会的。( 二 )
由于条件检查要求obj为Group类型 , 为什么还要像第一段代码那样在条件代码块中指明obj为Group类型呢?这可能会引发错误 。
这种更简洁的语法可以去掉Java程序里的大多数强制类型转换 。 (2011年的一篇针对相关语言特性的研究论文(http://www.cs.williams.edu/FTfJP2011/6-Winther.pdf)指出 , 24%的类型转换都来自于instanceof后的条件语句 。 )
JEP 305解释了这项改变 , 并给出了Joshuoa Bloch的著作《Effective Java》中的一个例子 , 演示了下面两种等价的写法:
@Override public boolean equals(Object o) {
return (o instanceof CaseInsensitiveString) &&
((CaseInsensitiveString) o).s.equalsIgnoreCase(s);
这段代码吗中冗余的CaseInsensitiveString强制类型转换可以去掉 , 转换成下面的方式:
@Override public boolean equals(Object o) {
return (o instanceof CaseInsensitiveString cis) &&
cis.s.equalsIgnoreCase(s);
这个预览特性很值得尝试 , 因为它打开了通向更通用的模式匹配的大门 。 模式匹配的思想是为语言提供一个便捷的语法 , 根据特定的条件从对象中提取出组成部分 。 这正是instanceof操作符的用例 , 因为条件就是类型检查 , 提取操作需要调用适当的方法 , 或访问特定的字段 。
换句话说 , 该预览功能仅仅是个开始 , 以后该功能肯定能够减少更多的代码冗余 , 从而降低bug发生的可能性 。
ヾ§  ̄▽)ゞ2333333
小便每次写类型强制转换的时候都想省掉该死的instanceof判断 , 可是内心又偏偏充满纠结忐忑 , 每次都要怀着满满的宽容去考虑用户操作的不确定性 。 算了 , 还是判断一下instanceof吧 。 于是 , Java14无异于又一次拯救了小便 , 小便要送了个尊给java14----“J你太美” 。
NullPointerException
NullPointerException作为最常见的异常之一 , 它经常出现在生产环境的日志中 , 但它并不会显示原始的代码 。 例如 , 如下代码:
var name = user.getMother().getHusband().getName();在Java 14之前 , 你可能会得到如下的错误:
Exception in thread \"main\" java.lang.NullPointerExceptionat NullPointerExample.main(NullPointerExample.java:5)
不幸的是 , 如果在第5行是一个包含了多个方法调用的赋值语句(如getMother()和getHusband()) , 那么任何一个都可能会返回null 。 实际上 , 变量user也可能是null 。 因此 , 无法判断是谁导致了NullPointerException 。
在Java 14中 , 新的JVM特性可以显示更详细的诊断信息:
Exception in thread \"main\" java.lang.NullPointerException: Cannot invoke \"Mother.getHusband()\" because the return value of \"User.getMother()\" is null at NullPointerExample.main(NullPointerExample.java:5)
该消息包含两个明确的组成部分:
后果:Mother.getHusband()无法被调用原因:User.getMother()的返回值为null增强版本的诊断信息只有在使用下述标志运行Java时才有效:
-XX:+ShowCodeDetailsInExceptionMessages下面是个例子:
java -XX:+ShowCodeDetailsInExceptionMessages NullPointerExample在以后的版本中 , 该选项可能会成为默认 。
这项改进不仅对于方法调用有效 , 其他可能会导致NullPointerException的地方也有效 , 包括字段访问、数组访问、赋值等 。
完美提高开发者的开发效率、调试效率 。
本文中主要是讲解如上几点 , 当然 , “J你太美”的新特性肯定不止如上几点 , 说得再多不如直接上手 , 欢迎各位看官针对“J你太美”发表一下自己的意见
推荐阅读
- 红米手机@售价1999?大厂这个骚操作,我是真没看懂
- 程序员■Java程序员必知:HashMap进行put操作会不会引起死循
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 大米评测 TB|iPhone12到底有没有高刷?分析师:iPhone12将不会搭载120Hz高刷
- 猿灯塔|POI Excel,Java架构-Apache
- 【Java】github上标星70.5k,贼火的Java突击手册,全面详细对标阿里P7
- 小贺说科技|闭眼买都不会亏,小米虽好但别乱选!这3款才是内行人的最爱
- 我是肥球球|“光子芯片”研发国内新进展,华为有救了,弯道超车?放弃光刻机
- 『科学家』人死后会不会去到另一个空间?科学家说出答案,让人难以置信
- 热剧天天乐|更不会造成美国崩溃,病毒不会阻止人类进步
