代码对比
✕ Java 8
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
✓ Java 16+
if (obj instanceof String s) {
IO.println(s.length());
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
无冗余转换
类型检查和变量绑定在单个表达式中完成。
更少代码行
一行代替两行——转换行完全消失。
作用域安全
模式变量仅在保证类型正确的作用域内有效。
旧方式
instanceof + 强制类型转换
现代方式
模式变量
自 JDK
16
难度
入门
JDK 支持
instanceof 的模式匹配
可用
自 JDK 16 起广泛可用(2021 年 3 月)
工作原理
instanceof 的模式匹配消除了 instanceof 检查后冗余的类型转换。绑定变量自动具有正确的类型和作用域。
相关文档