前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Java14新特性-instanceof类型匹配

qiguaw 2024-10-08 06:50:42 资源文章 16 ℃ 0 评论

Java14中,对instanceof运算符做了调整,允许在使用instanceof的时候,直接做对应的类型转化。比如在Java14之前,会出现如下代码:

if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.length());
}

在该代码中,会出现手动的类型转换代码。在Java14中,可以这样写:

if (obj instanceof String s) {
    System.out.println(s.length());
}

在这段代码中,instanceof运算符拥有了自动类型转换和绑定变量的能力,从而避免了多余的类型转化操作。如果obj是一个String,则转成String类型,并绑定到变量s上,变量s生命周期只存在判断为true的代码块中。

注意,下面两段代码也是成立的:

if (obj instanceof String str && str.length() < 10 ) {.. //use str..}
if (obj instanceof String str || str.length() > 5) {.. //use str..}

另外,考虑下面代码绑定变量str的作用范围:

if(!(obj instanceof String str)){
  // can not use str
}else{
  // can use str
}


特别的,新的instanceof方法,让equals方法变得特别简单:

@Override
public boolean equals(Object obj) {
  return this == obj ||
    (obj instanceof Teacher other) && other.name.equals(name);
}

这种特征叫做模式匹配,在很多其他开发语言中早已存在,模式匹配的思想是为语言提供一个便捷的语法,根据特定的条件从对象中提取出组成部分。在Java14中引入,也是一个非常亮眼的特性。


注意:该特性为preview,在Java14 build14+36-1461 JShell中实测,目前该特性支持并不完善,会持续关注该特性的后续发布。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表