Java14新特性-instanceof模式匹配

   Java14中对instanceof进行了升级,不仅仅是直接用来进行类型匹配,还可以直接转换成相应的实例。

在Java14之前只能这样写:

public class Java14Before {

    public static void main(String[] args) {
        Person person = new Person("小明", 10, "男");
        printPerson(person);
    }

    private static void printPerson(Object obj){
        if (obj instanceof Person) {
            //这里需要强制转换
            Person person = (Person) obj;
            System.out.println(person);
        }
    }
}
Person{name='小明', age=10, sex='男'}

在java14中就可以这样写了:

  public static void main(String[] args) {
        Person person = new Person("小明", 10, "男");
        printPerson(person);
    }

    private static void printPerson(Object obj){
        if (obj instanceof Person person) {
            //可以在模式匹配时直接转换成实例
            System.out.println(person);
        } else if (obj instanceof String str) {
            System.out.println(str);
        }
    }
Person{name='小明', age=10, sex='男'}

有这样的特性以后,我们就可以在其中做一些其它事情了,比如使用操作符&&。比如:

   public static void main(String[] args) {
        Person person = new Person("小明", 10, "男");
        printPerson(person);
        printPerson("小红");
    }

    private static void printPerson(Object obj){
        if (obj instanceof Person person && person.getAge() > 5) {
            //在这里就可以直接使用&&操作符
            System.out.println(person);
        } else if (obj instanceof String person) {
            System.out.println(person);
        }
    }
Person{name='小明', age=10, sex='男'}
小红

但是这里不能使用操作符||,因为操作符左边的表达式为false时不会造成短路,当执行到右边的表达式时变量还没有被定义。当然如果操作符||右边没有使用到强转后的变量是没有问题的。

总结

   java14提供的这个特性我感觉非常棒,省去了一些多余的代码,提高了代码的健壮性。期待以后还会挖掘出更多的用法。

 

 

你可能感兴趣的:(java,instance)