程序员

JDK14将于3月17日正式发布,技术“尝鲜”看这里

2020-03-15  本文已影响0人  再让你三行代码

JDK 14即将在2020年3月17日正式发布啦!自JDK8正式启用之后,距离现在已经5年多时间了。5年时间里很多企业也都换上了JDK 8,随着JDK9-13的陆续发布,许多企业也进行了更新迭代,技术"尝鲜"。

关于 JDK 14新特性预览相关介绍

JDK 14一共发行了16个JEP(JDK Enhancement Proposals,JDK 增强提案),即是筛选出的JDK 14新特性。

对于JDK 14新特性的深入理解

黑马程序员针对JDK 14准备发行的第一个显著新特性做一些讲解,让大家提前了解一下JDK 14其它新特性将在后期的视频中做详细的讲解梳理。

JEP 305: instanceof的模式匹配 (预览)

305: Pattern Matching for instanceof (Preview)

引入

JEP 305新增了使instanceof运算符具有模式匹配的能力。模式匹配能够使程序的通用逻辑更加简洁,代码更加简单,同时在做类型判断和类型转换的时候也更加安全,黑马程序员也给详细讲解了一下。

设计初衷

几乎每个程序员都见过如下代码,在包含判断表达式是否具有某种类型的逻辑时,程序会对不同类型进行不同的处理。我么来看一下熟悉的instanceof-and-cast用法:

java
// 在方法的入口接收一个对象
public void beforeWay(Object obj) {
    // 通过instanceof判断obj对象的真实数据类型是否是String类型
    if (obj instanceof String) {
        // 如果进来了,说明obj的类型是String类型,直接进行强制类型转换。
        String str = (String) obj;
        // 输出字符串的长度
        System.out.println(str.length());
    }
}

这段程序做了3件事:

这种模式的逻辑并不复杂,并且几乎所有Java程序员都可以理解。但是出于以下原因,上述做法并不是最理想的:

JDK 14提供了新的解决方案:新的instanceof模式匹配 ,新的模式匹配的用法如下所示,在instanceof的类型之后添加了变量str。如果instanceof对obj的类型检查通过,obj会被转换成str表示的String类型。在新的用法中,String类型仅出现一次。

具体描述示例代码:

java
public void patternMatching(Object obj) {
    if (obj instanceof String str) {
              // can use str here
        System.out.println(str.length());
    } else {
        // can't use str here
    }
}

上述代码需要注意:
如果obj是String类型,则将obj类型转换为String,并将其赋值给变量str。绑定的变量作用域为if语句内部,并不在false语句块内。

接下来我们看一下它的另一个做法:
通常equals()方法的实现都会先检查目标对象的类型。instanceof的模式匹配可以简化equals()方法的实现逻辑。下面代码中的Student类展示了相关的用法。

java
public class Student {
  private  String name ;

  public Student(String name) {
    this.name = name;
  }

//    @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//        Student student = (Student) o;
//        return Objects.equals(name, student.name);
//    }
   
  // 简化后做法!  
  @Override
  public boolean equals(Object obj) {
    return (obj instanceof Student s) && Objects.equals(this.name, s.name);
  }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

}

小结

instanceof运算符“匹配”规则如下:
如果obj是String类型,则将obj类型转换为String,并将其赋值给变量str。绑定的变量作用域为if语句内部,并不在false语句块内。
到这儿,有一定Java基础的同学应该看出来的JDK 14后的instanceof的模式匹配极大的简化了类型检查和转型的问题。

其他新特性

以上是对JDK 14的第一个显著新特性做的一些讲解,其他特性介绍以及免费资源获取:

JDK14 将于3月17日正式发布,提前尝鲜,获取JDK全网最全资源(点击领取)

对Java开发人员来说,最重要的无疑是:switch语句、文本块,intanceof的模式匹配操作,JDK 14还有更多的JEP新特性,黑马程序员将在后续的视频资源中做进行进一步的详细深入介绍,笔者也会及时为大家提供最新资源的,请大家持续关注哦!

上一篇 下一篇

猜你喜欢

热点阅读