目录
- 一、instanceof模式匹配的概述
- 二、instanceof模式匹配代码示例
- 2.1、jdk17之前 instanceof用法 代码示例
- 2.2、jdk17及之后 instanceof用法 代码示例一
- 2.3、jdk17及之后 instanceof用法 代码示例二
一、instanceof模式匹配的概述
- instanceof增加了模式匹配功能,如果变量类型经过instanceo判断能够匹配目标类型,则对应分支中无需再做类型强转。
- 该特性由
JDK14的JEP 305: Pattern Matching for instanceof (Preview)引入;
JDK15的JEP 375: PatternMatching for instanceof (Second Preview)进行了第二轮预览; JDK16的JEP 394: Pattern Matching for instanceof中转正。
二、instanceof模式匹配代码示例
2.1、jdk17之前 instanceof用法 代码示例
-
jdk17之前 在instanceof语句判断后的分支里需要强转示例
package com.xz.jdk17.day1; /** * @Author: xz * @Date: 2024-01-30 * @Description: jdk17之前instanceof 用法 * 在instanceof语句判断后的分支里需要强转 */ public class Test1 { public static void main(String[] args) { String str="hello java"; Object o = str; if (o instanceof Integer) { Integer i = (Integer) o; System.out.println(i.intValue()); } else if (o instanceof String) { String s = (String) o; System.out.println(s); } } }
-
输出结果
2.2、jdk17及之后 instanceof用法 代码示例一
-
jdk17及之后 在instanceof语句直接定义转换类型后的变量名示例
package com.xz.jdk17.day1; /** * @Author: xz * @Date: 2024-01-30 19:30 * @Description: jdk17及之后 instanceof 用法 * 在instanceof语句直接定义转换类型后的变量名 */ public class Test2 { public static void main(String[] args) { String str="hello java"; Object o = str; if(o instanceof Integer i){ System.out.println(i.intValue()); }else if(o instanceof String s){ System.out.println(s); } } }
-
输出结果
2.3、jdk17及之后 instanceof用法 代码示例二
-
jdk17及之后 在instanceof语句后直接拼其他条件示例
package com.xz.jdk17.day1; /** * @Author: xz * @Date: 2024-01-30 19:32 * @Description: jdk17及之后 instanceof 用法 * 在instanceof语句后直接拼其他条件 */ public class Test3 { public static void main(String[] args) { String str="hello java"; Object o = str; if(o instanceof Integer i && i >10){ System.out.println(i.intValue()); }else if(o instanceof String s && s.startsWith("h")){ System.out.println(s); } } }
-
输出结果