Skip to content
程序猿DD程序猿DD
主页
最新发布
Java新特性
玩转IDEA
旧版博客open in new window
社区交流open in new window
  • Java 18

    • 指定UTF-8为默认字符集
      • 简单Web服务器
        • 新增@snippet标签
        • Java 17

          • 密封类
            • switch的模式匹配(预览)
            • Java 16

              • record类
                • instanceof增强
                  • Stream转List增强
                    • Stream.toList()的性能比较
                    • Java 15

                      • 文本块
                        • 隐藏类
                        • Java 14

                          • switch表达式增强
                          • Java 13

                            • Java 12

                              • Java 11

                                • 移除JavaEE和CORBA模块
                                • Java 10

                                  • 局部变量的类型推断
                                  • Java 9

                                    • 交互式编程环境JShell
                                      • 不可变集合的快捷创建方法

                                      Java 16 新特性:instanceof增强

                                      程序猿DD原创2022年5月4日
                                      • Java
                                      • Java 16
                                      大约 1 分钟

                                      # Java 16 新特性:instanceof增强

                                      instanceof这个关键词,主要用来判断某个对象是不是某个类的实例。

                                      比如,有时候我们要处理一个类似这样的数据集:

                                      Map<String, Object> data = new HashMap<>();
                                      data.put("key1", "aaa");
                                      data.put("key2", 111);
                                      

                                      这个Map中的Value值因为可能是不同的对象,所以定义的是Object。这个时候,当我们get出来的时候,就需要去判断和转换之后再去处理。

                                      比如,我们取出key1的value,然后截取一段字符串的操作,就需要这样写:

                                      Object value = data.get("key1");
                                      if (value instanceof String) {
                                        String s = (String) value;
                                        System.out.println(s.substring(1));
                                      }
                                      

                                      先判断获取的value是否是String,再做强制类型转换,然后再对字符串进行操作。这是传统的写法,而在Java 16的增强之后,对于instanceof的判断以及类型转换可以合二为一了,所以改进后的写法可以如下:

                                      Object value = data.get("key1");
                                      if (value instanceof String s) {
                                        System.out.println(s.substring(1));
                                      }
                                      

                                      是不是简单不少呢?如果没用过的话,赶紧操作试试看吧!

                                      Tips:该功能经历了2个Preview版本(JDK 14中的JEP 305、JDK 15中的JEP 375),最终定稿于JDK 16中的JEP 394。

                                      本期视频:Java 16 新特性:instanceof增强open in new window

                                      如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群open in new window,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性专栏open in new window!

                                      上次编辑于: 2022/5/21 02:29:53
                                      贡献者: dd
                                      上一页
                                      record类
                                      下一页
                                      Stream转List增强
                                      © 2016 - 2022 didispace.com 版权所有
                                      沪ICP备14037150号-3
                                      Copyright © 2022 程序猿DD