在 Java 开发中,类型判断与转换是一种极为常见的操作,传统方式依赖 instanceof 结合显式强制转换,代码冗长、易错、可读性差📉。为此,Java 引入增强 instanceof✨,将类型判断与变量绑定合并,简化代码逻辑,提高开发效率与类型安全性🔒。
想象一下,身处清宫的你,能像三朝元老张廷玉👴一样快速区分康熙(开疆拓土型🗺️)、雍正(呕心沥血型💼)、乾隆(老年享受型🎎)的执政风格一样,精准、清晰地处理各种他们各自独特的性格和做事方式(数据类型和结构)。
“这个皇帝,是康熙还是雍正?”🤔 在 Java 8 时代,每次进行类型判断都需要冗长的 instanceof 验证。从 JDK 16 增强的 instanceof 到 JDK 17 的模式匹配 switch🔀,再到 JDK 21 中完善的记录模式📊,Java 的类型处理完成了从“繁缛的八王议政👑”到“高效军机处⚡”的转型🚀。
Object unknownKing = getKing(66);
if (unknownKing instanceof Kangxi) {
Kangxi emperor = (Kangxi) unknownKing; // 强制转换
System.out.println(emperor.reignPeriod());
}
unknownKing = getKing(2);
if (unknownKing instanceof Qianlong) {
Qianlong emperor = (Qianlong) unknownKing; // 强制转换
System.out.println(emperor.reignPeriod());
}这里不得不提到这两步固定套路,类型判断和变量使用被割裂开来,增加了不必要的复杂性,样板代码太多类似getter和setter,我们期待一个类似lombok一样的东西可以提升编码效率。
//JDK 16的简化仪式
if(unknownKing instanceof Kangxi xuanye){
System.out.println(xuanye.reignPeriod());
}
if(unknownKing instanceof Qianlong hongli){
System.out.println(hongli.reignPeriod());
}1、减少类型转换代码
2、编译器检查类型安全
3、更简洁明了
此处我们以获取庙号为例,通过switch语句可以快速实现变量的返回
// JDK 21的模式匹配switch
public static String miaohao(int kingIndex){
// JDK 21的模式匹配switch
Object period = getKing(kingIndex);
String miaohao = switch(period) {
case Kangxi emperor -> "合天弘运文武睿哲恭俭宽裕孝敬诚信中和圣文皇帝";
case Qianlong emperor -> "法天隆运至诚先觉体元立极敷文奋武钦明孝慈神圣纯皇帝";
default -> "亡国之君没有庙号 ";
};
return miaohao;
}这种新语法不仅更简洁,还引入了箭头语法->,免去了break语句的烦恼,同时支持将switch作为表达式直接返回值,简化了代码,提高了编写效率,当然如果喜欢了增强版--的一直用也没毛病
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。