Java 16 新玩法:instanceof 升级版,让类型检查更精准

简介: Java 16 新玩法:instanceof 升级版,让类型检查更精准

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

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

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

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

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

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。

相关文章
|
1天前
|
Java 编译器
【Java探索之旅】解密Java中的类型转换与类型提升
【Java探索之旅】解密Java中的类型转换与类型提升
8 0
|
4天前
|
安全 Java 程序员
Java 泛型类型:变幻中的不变性
【4月更文挑战第21天】
4 1
Java 泛型类型:变幻中的不变性
|
5天前
|
XML SQL 前端开发
【Java】实体字段传参类型线上问题记录
【Java】实体字段传参类型线上问题记录
17 1
|
6天前
|
Java
两千字讲明白java中instanceof关键字的使用!
两千字讲明白java中instanceof关键字的使用!
12 0
|
7天前
|
存储 Java
JAVA变量类型
JAVA变量类型
11 0
|
12天前
|
存储 算法 安全
什么是Java泛型类型?
【4月更文挑战第13天】
13 0
什么是Java泛型类型?
|
13天前
|
Java
浅谈Java的synchronized 锁以及synchronized 的锁升级
浅谈Java的synchronized 锁以及synchronized 的锁升级
8 0
|
18天前
|
Java
Java 21革命性升级:记录模式让编码更简洁、更优雅
Java 21革命性升级:记录模式让编码更简洁、更优雅
18 0
|
18天前
|
存储 Java 测试技术
Java 21革命性升级:探索分代ZGC的性能奇迹
Java 21革命性升级:探索分代ZGC的性能奇迹
14 0
|
3天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式