成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從 Java 11 遷移到 Java 17 值得嗎?

譯文 精選
開發 前端
Java17中所做的所有改進都傳達了一個信息:是時候切換到這個版本了。過渡承諾語法更簡潔,性能得到提高。你的項目將獲得安全性、靈活性和更好的錯誤消息。如果你已經遷移到Java11,那么遷移到Java17 會很順利。

作者丨Sergei Dzeboev

編譯丨諾亞

Java17給Java帶來了一些變化,但也使許多開發人員重新考慮他們遷移到其他JVM語言的愿望。最明顯的變化是在使Java代碼現代化和添加新的語言結構以簡化它的方向上進行的。當然,這個問題并非沒有對Java核心的改變,這使得Java更加高效。

1、文本塊

文本塊功能終于出現在Java中。我確信這是Java程序員等待已久的變化之一。現在你可以忘記難以閱讀的長復合行。文本塊允許你以最方便的方式編寫多行文本。在這樣的塊中,你可以按照自己希望的方式撰寫文本,并且仍然可以使用轉義序列進行更精確的格式設置。

Java11. 字符串轉義序列:

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.文本塊:

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

Java 17也考慮了安全性,并朝著這個方向邁出了重要的一步。這個想法是限制類或接口的繼承,同時保持其公開。結果,新的類類型,密封類,被添加到Java中。密封類的語法允許你指定可以使用其功能的后代。反過來,繼承者還可以允許或拒絕繼承,或者指定可以沿鏈繼承的類。此功能使你可以更靈活地創建項目,并方便地調整代碼的API。

Java 17. 密封類:

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

Java 17. 非密封繼承人:

public non-sealed class AnotherNonSealedClass extends SealedClass {
}

Java17.最終繼承人:

public final class AnotherFinalClass extends SealedClass {
}

Java17.密封繼承人:

public sealed class AnotherSealedClass extends SealedClass permits AnotherNonSealedClassTwo {
}

Javai17.非密封繼承人二級:

public non-sealed class AnotherNonSealedClassTwo extends AnotherSealedClass {
}

6、NullPointerExceptions

最后,Java 17 中一個非常有用的更新是改進的NullPointerException!最后,在堆棧跟蹤日志中,你可以看到哪個特定字段導致了NullPointerException。僅此功能就應該鼓勵你切換到Java 17。你不再需要長時間在代碼中四處尋找發生異常的險惡地方;現在Java將為你完成所有工作。

Java11.NPE:

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:

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、其他創新

當然,這并不是Java17中所做的更改的全部列表,但是討論的創新是最引人注目的。與往常一樣,Java開發人員在改進JVM方面做得非常出色,使其更加高效。

8、小結

Java17中所做的所有改進都傳達了一個信息:是時候切換到這個版本了。過渡承諾語法更簡潔,性能得到提高。你的項目將獲得安全性、靈活性和更好的錯誤消息。如果你已經遷移到Java11,那么遷移到Java17 會很順利。Java的競爭優勢在這里大放異彩,因為向后兼容性允許你切換到Java17而無需更改任何代碼,并利用所有更新的功能。Java17是Java11以來又一個LTS(長期支持)版本,可確保你在較長時間內收到所有必要的安全更新。

原文鏈接:https://hackernoon.com/is-migrating-from-java-11-to-java-17-worth-it

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2011-04-25 09:35:31

TwitterJava

2012-02-24 09:34:48

SVNGit

2021-09-29 06:28:12

Java 9 Java 17Java 11

2010-09-29 11:06:21

活動目錄OpenLDAP

2012-05-21 10:23:36

2013-06-21 13:49:08

MariaDB

2010-07-20 09:48:33

2023-09-23 08:17:51

Java 17開發

2016-10-26 16:44:44

WatchfinderAWS云計算

2013-05-03 09:49:38

MySQLMariaDB

2009-02-06 10:32:00

UnixLinux服務器

2020-07-27 11:35:26

GitHub代碼開發者

2011-06-24 10:10:35

SVN

2022-06-06 07:24:09

Caddy開源Ubuntu

2021-11-29 09:44:03

UmiJSVite前端

2020-12-29 10:12:19

WindowsLinux操作系統

2020-09-02 07:20:48

KubernetesJava應用程序容器

2009-04-16 17:23:37

OracleBasicFileSecureFile

2020-09-09 09:38:47

GoLangNodeJS編程語言

2020-01-06 12:50:50

Windows 7遷移Windows 10
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级欧美一级日韩片免费观看 | 国产精品视频一区二区三区 | 久久久精品天堂 | 国产一区免费视频 | 在线男人天堂 | 黄色免费在线网址 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 国产免费麻豆视频 | 精品中文字幕一区二区三区 | 亚洲国产成人精品女人久久久 | 视频一区在线观看 | 四虎影院一区二区 | 久久久久国产 | 激情欧美一区二区三区中文字幕 | av福利网站 | 国产精品自产av一区二区三区 | 日韩日韩日韩日韩日韩日韩日韩 | 国产精品视频导航 | 亚洲一区二区三区在线 | 亚洲高清在线视频 | 欧美激情第一区 | 婷婷不卡 | 欧美激情精品久久久久久免费 | 男人av的天堂 | av永久免费 | 91精品国产91久久久久久不卞 | 精品成人av| av首页在线| 日本免费一区二区三区 | 99国产精品久久久 | 成人h动漫精品一区二区器材 | www久久久 | 成人不卡一区二区 | 成人性视频免费网站 | 少妇一级淫片免费播放 | 天天操天天摸天天爽 | 欧洲精品在线观看 | 欧美一区二区三区久久精品 | 情侣黄网站免费看 | 中文字幕在线精品 | 综合久久av |