JDK14的新特性:instanceof模式匹配的使用

 更新时间:2020年05月09日 09:51:06   作者:flydean程序那些事  
这篇文章主要介绍了JDK 14的新特性:instanceof模式匹配的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。

本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。 也就是说在instanceof中可以使用模式匹配了。

怎么理解呢?

我们先举个历史版本中使用instanceof的例子。

假如我们是动物园的管理员,动物园里面有Girraffe和Hippo两种动物。

@Data
public class Girraffe {
 private String name;
}
@Data
public class Hippo {
 private String name;
}

为了简单起见,上面两种动物我们都之定义一个name属性。

接下来我们要对两种动物进行管理,传入一个动物,判断一下这个动物是不是上面两种动物之一,按照传统的办法,我们应该这样做:

 public void testZooOld(Object animal){
  if(animal instanceof Girraffe){
   Girraffe girraffe = (Girraffe) animal;
   log.info("girraffe name is {}",girraffe.getName());
  }else if(animal instanceof Hippo){
   Hippo hippo = (Hippo) animal;
   log.info("hippo name is {}",hippo.getName());
  }
  throw new IllegalArgumentException("对不起,该动物不是地球上的生物!");
 }

上面的代码中, 如果instanceof确认成功,我们还需要将对象进行转换,才能调用相应对象中的方法。

有了JDK 14,一切都变得容易了,我们看下最新的JDK 14的模式匹配怎么做:

 public void testZooNew(Object animal){
  if(animal instanceof Girraffe girraffe){
   log.info("name is {}",girraffe.getName());
  }else if(animal instanceof Hippo hippo){
   log.info("name is {}",hippo.getName());
  }
  throw new IllegalArgumentException("对不起,该动物不是地球上的生物!");
 }

注意instanceof的用法,通过instanceof的模式匹配,就不需要二次转换了。直接使用就可以了。并且模式匹配的对象还被限定了作用域范围,会更加安全。

注意,如果你使用的最新版的IntelliJ IDEA 2020.1版本的话,语言编译版本一定要选择14(Preview),因为这个功能是preview的。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

到此这篇关于JDK 14的新特性:instanceof模式匹配的文章就介绍到这了,更多相关JDK 14的新特性:instanceof模式匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis-generator自动生成dao、mapping、bean配置操作

    mybatis-generator自动生成dao、mapping、bean配置操作

    这篇文章主要介绍了mybatis-generator自动生成dao、mapping、bean配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java8中接口的新特性使用指南

    Java8中接口的新特性使用指南

    接口改动一下就要修改对应的实现类,为了兼容老接口,Java8新增了默认方法和静态方法,下面这篇文章主要给大家介绍了关于Java8中接口新特性的相关资料,需要的朋友可以参考下
    2021-11-11
  • 使用ehcache三步搞定springboot缓存的方法示例

    使用ehcache三步搞定springboot缓存的方法示例

    本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • IDEA下使用Spring Boot热加载的实现

    IDEA下使用Spring Boot热加载的实现

    本文主要介绍了IDEA下使用Spring Boot热加载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • SpringBoot 日志的配置及输出应用教程

    SpringBoot 日志的配置及输出应用教程

    Spring Boot 默认使用 SLF4J+Logback 记录日志,并提供了默认配置。本文我们将重点介绍Spring Boot日志的配置及输出。感兴趣的小伙伴可以了解一下
    2021-12-12
  • JPA @ManyToMany 报错StackOverflowError的解决

    JPA @ManyToMany 报错StackOverflowError的解决

    这篇文章主要介绍了JPA @ManyToMany 报错StackOverflowError的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java基础之反射原理与用法详解

    Java基础之反射原理与用法详解

    这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • java 中的static关键字和final关键字的不同之处

    java 中的static关键字和final关键字的不同之处

    java 中的static关键字和final关键字的不同之处,需要的朋友可以参考一下
    2013-03-03
  • 详解使用spring cloud config来统一管理配置文件

    详解使用spring cloud config来统一管理配置文件

    这篇文章主要介绍了详解使用spring cloud config来统一管理配置文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 使用dom4j解析xml文件问题

    使用dom4j解析xml文件问题

    这篇文章主要介绍了使用dom4j解析xml文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论