当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-08-09 23:02:35 395观看
导读作者丨Sergei Dzeboev编译丨诺亚Java17给Java带来了一些变化,但也使许多开发人员重新考虑他们迁移到其他JVM语言的愿望。最明显的变化是在使Java代码现代化和添加新的语言结构以简化它的方向上进行的。当然,这个问题并

作者丨Sergei DzeboevSnL28资讯网——每日最新资讯28at.com

编译丨诺亚SnL28资讯网——每日最新资讯28at.com

SnL28资讯网——每日最新资讯28at.com

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

1、文本块

SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

Java11. 字符串转义序列:SnL28资讯网——每日最新资讯28at.com

public String poem = "                " +            "Twinkle, Twinkle, Little Star/n" +            "                /n" +            "                Twinkle, twinkle, little star,/n" +            "                How I wonder what you are!/n" +            "                Up above the world so high,/n" +            "                Like a diamond in the sky./n" +            "                /n" +            "                Twinkle, twinkle, little star,/n" +            "                How I wonder what you are!";

Java17.文本块:SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

Java11.数据类:SnL28资讯网——每日最新资讯28at.com

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:SnL28资讯网——每日最新资讯28at.com

public record DataClass(Integer id, String name) {}

SnL28资讯网——每日最新资讯28at.com

区别很明显:在执行相同功能的同时,创建Record所需的代码行要少得多。SnL28资讯网——每日最新资讯28at.com

3、新的switch表达式

SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

Java11.switch表达式:SnL28资讯网——每日最新资讯28at.com

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 表达式:SnL28资讯网——每日最新资讯28at.com

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模式匹配

SnL28资讯网——每日最新资讯28at.com

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

SnL28资讯网——每日最新资讯28at.com

Java 11. 经典的 intanceofSnL28资讯网——每日最新资讯28at.com

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. 更新的 intanceofSnL28资讯网——每日最新资讯28at.com

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密封类

SnL28资讯网——每日最新资讯28at.com

Java 17也考虑了安全性,并朝着这个方向迈出了重要的一步。这个想法是限制类或接口的继承,同时保持其公开。结果,新的类类型,密封类,被添加到Java中。密封类的语法允许你指定可以使用其功能的后代。反过来,继承者还可以允许或拒绝继承,或者指定可以沿链继承的类。此功能使你可以更灵活地创建项目,并方便地调整代码的API。SnL28资讯网——每日最新资讯28at.com

SnL28资讯网——每日最新资讯28at.com

Java 17. 密封类:SnL28资讯网——每日最新资讯28at.com

public sealed class SealedClass permits AnotherSealedClass, AnotherNonSealedClass, AnotherFinalClass {}

Java 17. 非密封继承人:SnL28资讯网——每日最新资讯28at.com

public non-sealed class AnotherNonSealedClass extends SealedClass {}

Java17.最终继承人:SnL28资讯网——每日最新资讯28at.com

public final class AnotherFinalClass extends SealedClass {}

Java17.密封继承人:SnL28资讯网——每日最新资讯28at.com

public sealed class AnotherSealedClass extends SealedClass permits AnotherNonSealedClassTwo {}

Javai17.非密封继承人二级:SnL28资讯网——每日最新资讯28at.com

public non-sealed class AnotherNonSealedClassTwo extends AnotherSealedClass {}

6、NullPointerExceptions

SnL28资讯网——每日最新资讯28at.com

最后,Java 17 中一个非常有用的更新是改进的NullPointerException!最后,在堆栈跟踪日志中,你可以看到哪个特定字段导致了NullPointerException。仅此功能就应该鼓励你切换到Java 17。你不再需要长时间在代码中四处寻找发生异常的险恶地方;现在Java将为你完成所有工作。SnL28资讯网——每日最新资讯28at.com

SnL28资讯网——每日最新资讯28at.com

Java11.NPE:SnL28资讯网——每日最新资讯28at.com

public static void main(String... args) {        String s = null;        System.out.println(s.toLowerCase());    }
Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:4)

Java17.改进的NPE:SnL28资讯网——每日最新资讯28at.com

public static void main(String... args){        String s = null;        System.out.println(s.toLowerCase());    }
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "s" is null at edu.javamodules/edu.javaversions.eleventoseventeen.NpeExample.main(NpeExample.java:7)

7、其他创新

SnL28资讯网——每日最新资讯28at.com

当然,这并不是Java17中所做的更改的全部列表,但是讨论的创新是最引人注目的。与往常一样,Java开发人员在改进JVM方面做得非常出色,使其更加高效。SnL28资讯网——每日最新资讯28at.com

8、小结

Java17中所做的所有改进都传达了一个信息:是时候切换到这个版本了。过渡承诺语法更简洁,性能得到提高。你的项目将获得安全性、灵活性和更好的错误消息。如果你已经迁移到Java11,那么迁移到Java17 会很顺利。Java的竞争优势在这里大放异彩,因为向后兼容性允许你切换到Java17而无需更改任何代码,并利用所有更新的功能。Java17是Java11以来又一个LTS(长期支持)版本,可确保你在较长时间内收到所有必要的安全更新。SnL28资讯网——每日最新资讯28at.com

SnL28资讯网——每日最新资讯28at.com

原文链接:https://hackernoon.com/is-migrating-from-java-11-to-java-17-worth-itSnL28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5140-0.html从 Java 11 迁移到 Java 17 值得吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 大模型速度狂飙2.39倍!清华联手微软首提SoT,让LLM思考更像人类

下一篇: Rust“巨坑”?真相来了!

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人“珍藏”是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
Top