专栏目录

三、Java 9 ~ 17 新特性试读

Java 16 新特性: instanceof 增强

友情提示

推荐您使用 Chrome 浏览器来阅读本实战专栏,其他浏览器可能存在兼容性问题。

本小节中,我们来学习一下 Java 16 中的新特性 —— instanceof 类型判断增强

1. Java 16 之前的类型判断

先看一下,在 Java 16 之前,假设我们想对某个对象进行类型判断,并在判断成功后,使用到具体对象的某个方法,示例代码如下:

public class Main {
    
    public static void test(Object object) {
        if (object instanceof Integer) {
            // 类型转换
            Integer i = (Integer) object;
            System.out.println("object is Integer: " + i.intValue());
        } else if (object instanceof String) {
            // 类型转换
            String s = (String) object;
            // 替换字符串
            System.out.println("object is String: " + s.replace("教程", "专栏"));
        }
    }

    public static void main(String[] args) {
        test(1);
        test("犬小哈教程");
    }

}

想要使用到具体对象的某个方法,如 Integer 对象中定义的 intValue() 方法,首先,你必须手动强转成 Integer 对象才行。语法上有点啰嗦,有木有~

控制台输出如下:

2. Java 16 之后的类型判断

在 Java 16 之后,无需再显示的进行类型强转了。使用新特性来重写上面的示例代码,如下:

public class Main {
    
    public static void test(Object object) {
        if (object instanceof Integer i) {
            System.out.println("object is Integer: " + i.intValue());
        } else if (object instanceof String s) {
            // 替换字符串
            System.out.println("object is String: " + s.replace("教程", "专栏"));
        }
    }

    public static void main(String[] args) {
        test(1);
        test("犬小哈教程");
    }

}

我们可以在 instanceof 判断中,顺便定义判断对象的变量名,方法块中只接使用即可,无需再手动强转了。

控制台输出和上面一致:

最后编辑于 2024-04-28 16:16:43