05 | 类型匹配:怎么切除臃肿的强制转换?
阅读案例
- 深入了解
- 翻译
- 解释
- 总结
Java模式匹配中的类型匹配是一个重要特性,通过匹配谓词和匹配变量的组合,指定模式的数据类型并提取相应的数据变量。传统的类型转换操作存在繁琐的步骤,容易引入错误,而类型匹配通过简化代码逻辑、减少错误潜入,提高生产效率。文章介绍了不同的代码组织方式,并分析了它们的特点,其中紧跟着类型匹配语句的代码布局被认为是最安全、不容易出错且易于阅读的方式。此外,实例匹配还带来了性能优势,通过测试发现使用实例匹配代码的吞吐量提高了将近20%。总的来说,本文深入探讨了Java模式匹配中类型匹配的重要性和优势,以及匹配变量的作用域和不同代码组织方式的影响,对于想要深入了解Java模式匹配的开发人员具有重要的参考价值。
《深入剖析 Java 新特性》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- 许灵置顶https://github.com/XueleiFan/java-up/pull/11 老师你好!匹配变量的作用域有一种情况,在文章中没有提到。 if (!(shape instanceof Rectangle rect)) { // Field rect is in scope, local rect is not in scope here } else { // Field rect is shadowed, local rect is in scope } // Field rect is in scope, local rect is not in scope here
作者回复: 这个发现很好。小伙伴们,咱们点赞把它置顶好吗?这样,更多的小伙伴能够看得到这种情况。
2021-11-2615 - ABC之前第一眼看到就觉得和try-with-resource有异曲同工之妙,减少模板代码,优化性能.
作者回复: 嗯, 我还没联系到try-with-resource。 你这么一说,还真是有那么点意思。
2021-11-244 - aoe类型匹配语法糖真甜,还能提升性能,很意外很惊喜!
作者回复: 有办法做到JVM里,就不仅仅是语法糖了。这也是JDK能够给基于JVM的其他编程语言带来的好处。
2021-11-243 - 码农Kevin亮请问老师这个性能测试是用什么工具与方法做的?
作者回复: 请参考这里,https://github.com/openjdk/jmh。这是一个很有用的工具,建议看一看,写写性能测试。用熟了,你可能也会像我一样,喜欢上这个小工具。专栏的代码库里,也有性能测试的代码。
2021-11-2433 - yihang老师你好,【我知道使用实例匹配会提高性能,但是没想到有这么大的提升】但反编译后的字节码都一样啊: if (obj instanceof Student stu) { System.out.println(stu); } if (obj instanceof Student) { Student stu = (Student) obj; System.out.println(stu); } 为什么会有性能提升,能看到你测试用例代码吗
作者回复: 哦,你快来帮我看看,是不是性能测试的用例写错了?https://github.com/XueleiFan/code-bench/blob/main/src/main/java/code/bench/PatternBench.
2022-04-192 - topsion老师,《代码精尽之路》专栏是哪个专栏
作者回复: 代码精进之路
2023-07-11归属地:陕西1 - Clark与typescript在instanceof直接把类型确定了比,Java这个新语法还是不够优雅。 typescript: if (a instanceof Rect) { a.area(); // a is Rect } 是不是觉得ts这样挺优雅的
作者回复: 这就牵扯到另外一个问题了,就是强类型还是弱类型的编程语言。ts这里可以做到更优雅。
2021-11-241 - 绘世浮夸 つ老师可以解答一下为什么反编译的代码一样,性能是怎么提升的吗
作者回复: 运行的时候,执行的不是反编译的代码。看看下面的问题能不能帮助你:字节码一样吗? 反编译出来的代码一样吗?反编译有没有问题?
2023-06-06归属地:江苏 - I PYJ老师,您好。文章中的这一段:下面例子中的两段代码,就是两个常见的类型转换错误。第一段代码误用了变量类型,第二段代码误用了判断结果。 我看了举例的第一段代码不存在误用来变量类型呀,您这边应该是想展示一个错误的例子,但是没有改到吧
作者回复: 很抱歉, 已经修改了。谢谢你帮助发现了这个问题。
2022-11-02归属地:美国 - roceduhttps://github.com/XueleiFan/code-bench/blob/main/src/main/java/crypto/bench/PatternBench.java 最后一个链接404了
作者回复: 谢谢。链接应该是: https://github.com/XueleiFan/code-bench/blob/main/src/main/java/code/bench/PatternBench.java。编辑能把链接修改成一下吗?
2022-03-26