网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > ddos防御

从 Java 11 迁移到 Java 17 值得吗?

  编译丨诺亚

  Java17给Java带来了一些变化,但也使许多开发人员重新考虑他们迁移到其他JVM语言的愿望。最明显的变化是在使Java代码现代化和添加新的语言结构以简化它的方向上进行的。当然,这个问题并非没有对Java核心的改变,这使得Java更加高效。

  1、文本块

  文本块功能终于出现在Java中。我确信这是Java程序员等待已久的变化之一。现在你可以忘记难以阅读的长复合行。文本块允许你以最方便的方式编写多行文本。在这样的块中,你可以按照自己希望的方式撰写文本,并且仍然可以使用转义序列进行更精确的格式设置。

  Java11. 字符串转义序列:

  复制

  public String poem = " " +

  "Twinkle, Twinkle, Little Star" +

  " " +

  " Twinkle, twinkle, little star," +

  " How I wonder what you are!" +

  " Up above the world so high," +

  " Like a diamond in the sky." +

  " " +

  " Twinkle, twinkle, little star," +

  " How I wonder what you are!";

  Java17.文本块:

  复制

  public String poem = """

  Twinkle, Twinkle, Little Star

  Twinkle, twinkle, little star,

  How I wonder what you are!

  Up above the world so high,

  Like a diamond in the sky.

  Twinkle, twinkle, little star,

  How I wonder what you are!

  """;

  2、Record

  另一个慢慢使Java语言更有用的更新是record。以前,要创建一个类,我们需要描述该类,指定其字段,并添加必要的方法,例如equals、hashcode、getter和setters。自从record出现以来,所有这些现在都变得不必要了。

  record允许你通过仅指定必填字段来创建数据安全类;将自动创建所有其他方法。但是,值得记住的是,record充当数据类,创建是为了存储数据,而不是执行各种操作。record是线程安全的,因为所有record字段都是最终的。最后要知道的重要一点是,用于获取字段值的生成方法不会像经典Java Bean 中那样包含“get”。

  Java11.数据类:

  复制

  public class DataClass {

  public DataClass (Integer id, String name) {

  this.id = id;

  this.name = name;

  }

  private final Integer id;

  private final String name;

  public Integer getId() {

  return id;

  }

  public String getName() {

  return name;

  }

  @Override

  public boolean equals(Object o) {

  }

  @Override

  public int hashCode() {

  }

  }

  Java17.Record:

  复制

  public record DataClass(Integer id, String name) {

  }

  区别很明显:在执行相同功能的同时,创建Record所需的代码行要少得多。

  3、新的switch表达式

  更改列表还包括切换表达式。这些更改不仅影响了Switch表达式的语法(使其编写更加简洁),还影响了功能。Switch表达式现在返回迭代的结果,使编写代码变得更加容易,并使其更加简洁。新的开关表达式不再需要每个case后面都加一个break

  Java11.switch表达式:

  复制

  public String getSeasonDescription(Season season) {

  String seasonDescription;

  switch (season) {

  case SPRING:

  seasonDescription = "Flowers are blooming!";

  break;

  case SUMMER:

  seasonDescription = "It's hot outside!";

  break;

  case AUTUMN:

  seasonDescription = "Leaves are falling!";

  break;

  case WINTER:

  seasonDescription = "Snow is coming!";

  break;

  default:

  throw new IllegalStateException("Invalid season: " + season);

  }

  return seasonDescription;

  }

  Java 17. 增强的 Switch 表达式:

  复制

  public String getSeasonDescription(Season season) {

  return switch (season) {

  case SPRING -> "Flowers are blooming!";

  case SUMMER -> "It's hot outside!";

  case AUTUMN -> "Leaves are falling!";

  case WINTER -> "Snow is coming!";

  };

  }

  4、instanceof模式匹配

  另一项设计改进也影响了操作员。现在,更安全,更简洁。通过此更改,不再需要首先检查给定对象是否是某个类的实例,然后执行强制转换;现在可以在一行中完成此操作。如前所述,这不仅仅是语法糖,而是一个更优化的运算符。

  Java 11. 经典的 intanceof

  复制

  public void findInstance(Object o) {

  if (o instanceof String) {

  String s = (String) o;

  System.out.printf("Object is a string %s", s);

  } else if (o instanceof Number) {

  Number n = (Number) o;

  System.out.printf("Object is a number %n", n);

  }

  }

  Java 17. 更新的 intanceof

  复制

  public void findInstance(Object o) {

  if (o instanceof String s) {

  System.out.printf("Object is a string %s", s);

  } else if (o instanceof Number n) {

  System.out.printf("Object is a number %n", n);

  }

  }

  5、Sealed Classes密封类

(责任编辑:admin)