您的位置:首页 > 编程语言 > Java开发

Java14新特性-instanceof模式匹配

2020-07-20 04:06 513 查看

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

在Java14之前只能这样写:

[code]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);
}
}
}
[code]Person{name='小明', age=10, sex='男'}

在java14中就可以这样写了:

[code]  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);
}
}
[code]Person{name='小明', age=10, sex='男'}

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

[code]   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);
}
}
[code]Person{name='小明', age=10, sex='男'}
小红

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

总结

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

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: