国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java SE 20 新增特性

這篇具有很好參考價(jià)值的文章主要介紹了Java SE 20 新增特性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Java SE 20 新增特性

作者:Grey

原文地址:

博客園:Java SE 20 新增特性

CSDN:Java SE 20 新增特性

源碼

源倉庫: Github:java_new_features

鏡像倉庫: GitCode:java_new_features

Switch類型匹配(第四次預(yù)覽)

在Java SE 17 新增特性中,Switch 類型匹配作為預(yù)覽功能推出,到 Java SE 20 ,這個(gè)功能已經(jīng)是第四次預(yù)覽版,在 Java SE 17 中,可以通過加強(qiáng) switch 表達(dá)式和語句的模式匹配能力,減少了定義這些表達(dá)式所需的模板,此外,switch 中增加了空值的支持。如下示例:

注:執(zhí)行如下代碼需要基于 Java SE 17 + ,且增加--enable-preview參數(shù)。

package git.snippets.jdk20;


/**
 * switch類型匹配(二次預(yù)覽)
 *
 * @author <a href="mailto:410486047@qq.com">Grey</a>
 * @date 2023/05/03
 * @since 20
 */
public class SwitchMatchTest {
    public static void main(String[] args) {
        switchMatch(3);
        switchMatch("HELLO");
        switchMatch("hello world");
        switchMatch(null);
    }

    static void switchMatch(Object obj) {
        switch (obj) {
            case String s when s.length() > 5 -> System.out.println(s.toUpperCase());
            case String s -> System.out.println(s.toLowerCase());
            case Integer i -> System.out.println(i * i);
            case null -> System.out.println("null obj");
            default -> {
            }
        }
    }
}

范圍值(Scoped Value,孵化階段)

JEP 429 在 Java SE 20 的孵化階段引入了范圍值(ScopedValue), 范圍值可以與虛擬線程很好地結(jié)合。它允許在有限的時(shí)間內(nèi)存儲(chǔ)一個(gè)值,而且只有寫入該值的線程可以讀取它。類似ThreadLocal對(duì)于線程的作用。詳見:SCOPED VALUES IN JAVA

record 的匹配增強(qiáng)(第二次預(yù)覽)

record 的匹配增強(qiáng)首次預(yù)覽在 Java SE 19, record 可以與 instanceof 一起使用,也可以使用 switch 來訪問記錄的字段,而無需強(qiáng)制轉(zhuǎn)換和調(diào)用訪問器方法,一個(gè) record 的示例如下

package git.snippets.jdk20;

/**
 * record 模式匹配增強(qiáng)(二次預(yù)覽)
 * 需要增加 --enable-preview參數(shù)
 *
 * @author <a href="mailto:410486047@qq.com">Grey</a>
 * @date 2022/9/22
 * @since 19
 */
public class RecordTest {
    public static void main(String[] args) {
        Points points = new Points(1, 2);
        Line line = new Line(new Points(1, 2), new Points(3, 4));
        printPoints(points);
        printLine(line);
    }


    private static void printPoints(Object object) {
        if (object instanceof Points(int x, int y)) {
            System.out.println("jdk 19 object is a position, x = " + x + ", y = " + y);
        }
        if (object instanceof Points points) {
            System.out.println("pre jdk 19 object is a position, x = " + points.x()
                    + ", y = " + points.y());
        }
        switch (object) {
            case Points position -> System.out.println("pre jdk 19 object is a position, x = " + position.x()
                    + ", y = " + position.y());
            default -> throw new IllegalStateException("Unexpected value: " + object);
        }
        switch (object) {
            case Points(int x, int y) -> System.out.println(" jdk 19 object is a position, x = " + x
                    + ", y = " + y);
            default -> throw new IllegalStateException("Unexpected value: " + object);
        }

    }

    public static void printLine(Object object) {
        if (object instanceof Line(Points(int x1, int y1), Points(int x2, int y2))) {
            System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1
                    + ", x2 = " + x2 + ", y2 = " + y2);
        }
        switch (object) {
            case Line(Points(int x1, int y1), Points(int x2, int y2)) ->
                    System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1
                            + ", x2 = " + x2 + ", y2 = " + y2);
            // other cases ...
            default -> throw new IllegalStateException("Unexpected value: " + object);
        }
    }

}

record Points(int x, int y) {
}

record Line(Points from, Points to) {
}

此外,在 JEP 432 中,Java SE 20 的 record 支持類型推斷,例如,定義了如下數(shù)據(jù)結(jié)構(gòu)

interface Multi<T> {}

record Tuple<T>(T t1, T t2) implements Multi<T> {}

record Triple<T>(T t1, T t2, T t3) implements Multi<T> {}

在 Java SE 20 之前,需要這樣做

    // 需要指定類型
    static void preJDK20(Multi<String> multi) {
        if (multi instanceof Tuple<String>(var s1, var s2)) {
            System.out.println("Tuple: " + s1 + ", " + s2);
        } else if (multi instanceof Triple<String>(var s1, var s2, var s3)) {
            System.out.println("Triple: " + s1 + ", " + s2 + ", " + s3);
        }
    }

需要指定類型,例如:本實(shí)例需要指定 String 類型。

到了 Java SE 20,record 有類型推斷,所以上述代碼可以寫成

    static void JDK20(Multi<String> multi) {
        if (multi instanceof Tuple(var s1, var s2)) {
            System.out.println("Tuple: " + s1 + ", " + s2);
        } else if (multi instanceof Triple(var s1, var s2, var s3)) {
            System.out.println("Triple: " + s1 + ", " + s2 + ", " + s3);
        }
    }

在循環(huán)中也可以支持類似的用法,示例如下:

在 Java SE 20 之前

record Position(int x, int y) {
}
static void preJDK20Loop(List<Position> positions) {
    for (Position p : positions) {
        System.out.printf("(%d, %d)%n", p.x(), p.y());
    }
}

在 Java SE 20 版本中,可直接寫成如下形式

    static void JDK20Loop(List<Position> positions) {
        for (Position(int x, int y) : positions) {
            System.out.printf("(%d, %d)%n", x, y);
        }
    }

此外,在 Java SE 20 中,移除了對(duì) record 命名模式的支持,在 Java SE 19 中,如下寫法是對(duì)的

        if (object instanceof Points(int x, int y) points) {
            System.out.println("pre jdk 19 object is a position, x = " + points.x()
                    + ", y = " + points.y());
        }

但是到了 Java SE 20 ,已經(jīng)將上述寫法廢棄,Java SE 20 只支持如下兩種寫法

     if (object instanceof Points(int x, int y)) {
            System.out.println("jdk 19 object is a position, x = " + x + ", y = " + y);
        }
        if (object instanceof Points points) {
            System.out.println("pre jdk 19 object is a position, x = " + points.x()
                    + ", y = " + points.y());
        }

廢棄 java.net.URL 的構(gòu)造方法

java.net.URL的構(gòu)造函數(shù)已被標(biāo)記為"廢棄"。應(yīng)該使用URI.create(..)URI.toURL()方法。下面是一個(gè)例子:

package git.snippets.jdk20;

import java.net.URI;
import java.net.URL;

/**
 * URL的構(gòu)造方法被徹底廢棄
 *
 * @author <a href="mailto:410486047@qq.com">Grey</a>
 * @date 2023/05/03
 * @since 20
 */
public class URLConstructorTest {
    public static void main(String[] args) throws Exception {
        // 以下構(gòu)造方法在 Java SE 20 被徹底廢棄
        // URL url = new URL("xxx");
        // Java SE 20 用如下方法構(gòu)造 URL
        URL url = URI.create("xxx").toURL();
    }
}

更多

Java SE 7及以后各版本新增特性,持續(xù)更新中...

參考資料

Java Language Changes for Java SE 20

JDK 20 Release Notes

JAVA 20 FEATURES(WITH EXAMPLES)文章來源地址http://www.zghlxwxcb.cn/news/detail-432663.html

到了這里,關(guān)于Java SE 20 新增特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HTML5新增特性

    HTML5新增特性

    HTML從1993年發(fā)展開始到1999年,從1.0版本發(fā)展到4.01版本,4.01版本是一個(gè)通用版本,在很長一段時(shí)間制作HTML網(wǎng)頁都是使用4.01版本。 后續(xù)發(fā)展版本號(hào)發(fā)生了變化,沒有直接發(fā)展到HTML5,而是到2000年發(fā)展為XHTML1.0版本,這個(gè)版本是對(duì)之前4.01版本的一個(gè)嚴(yán)格化和升級(jí),但是并沒有增

    2024年04月23日
    瀏覽(26)
  • CSS3新增特性(二)

    CSS3新增特性(二)

    ? 屬性名:transform (可用于制作2D轉(zhuǎn)換,也可用于制作3D轉(zhuǎn)轉(zhuǎn)換;2D轉(zhuǎn)換是平面上的轉(zhuǎn)換,3D轉(zhuǎn)換是在三維立體空間的轉(zhuǎn)換) ? 作用:對(duì)元素進(jìn)行水平或垂直方向的 移動(dòng)、縮放、旋轉(zhuǎn)、拉長或拉伸 。 配合過渡和即將學(xué)習(xí)的動(dòng)畫知識(shí),可以取代大量之前只能靠Flash才可以實(shí)現(xiàn)

    2024年04月25日
    瀏覽(26)
  • HTML5 新增內(nèi)容 新特性

    number:數(shù)字; tel:電話; search:搜索; email:郵箱; url:地址; date:年月日; time:時(shí)分秒; month:月; week:周; time:時(shí)間; color:生成顏色選擇表單; range:范圍 原有 text:文本 radio:?jiǎn)芜x password:密碼 button:按鈕 checkbox:多選 file:文件 image:圖片 submit:提交 re

    2024年02月09日
    瀏覽(17)
  • PTA7-1 公路村村通 分?jǐn)?shù) 20 作者 陳越 單位 浙江大學(xué)

    現(xiàn)有村落間道路的統(tǒng)計(jì)數(shù)據(jù)表中,列出了有可能建設(shè)成標(biāo)準(zhǔn)公路的若干條道路的成本,求使每個(gè)村落都有公路連通所需要的最低成本。 輸入格式: 輸入數(shù)據(jù)包括城鎮(zhèn)數(shù)目正整數(shù)N(≤1000)和候選道路數(shù)目M(≤3N);隨后的M行對(duì)應(yīng)M條道路,每行給出3個(gè)正整數(shù),分別是該條道路

    2024年02月05日
    瀏覽(15)
  • .Net 6.0中的新增特性_.Net 6.0中的新增功能

    .Net 6.0中的新增特性_.Net 6.0中的新增功能 一、.Net 6 介紹 .NET 6 作為 LTS 長期支持版本,.NET 6 將會(huì)獲得 3 年的技術(shù)支持。 .NET 6 是首個(gè)原生支持 Apple Silicon (Arm64) 的版本,并且還針對(duì) Windows Arm64 進(jìn)行了改進(jìn)。 .NET 團(tuán)隊(duì)構(gòu)建了一個(gè)新的動(dòng)態(tài)配置文件引導(dǎo)優(yōu)化 (PGO) 系統(tǒng),該系統(tǒng)可提

    2024年02月05日
    瀏覽(20)
  • 【全面】CSS3新增了哪些新特性?

    目錄 一、選擇器的擴(kuò)展 1.??屬性選擇器 2.?偽類選擇器 3.?偽元素選擇器 二、盒子模型的增強(qiáng) ?1.?box-sizing屬性 2. 邊框圓角(border-radius) 3.?盒陰影(box-shadow) 三、過渡和動(dòng)畫效果 1.?過渡效果 2.?動(dòng)畫效果 四、響應(yīng)式布局 1.?媒體查詢(media query) 2.?彈性布局(Flexbox)

    2024年02月07日
    瀏覽(21)
  • 開源進(jìn)展 | WeBASE v3.1.0發(fā)布,新增多個(gè)實(shí)用特性

    開源進(jìn)展 | WeBASE v3.1.0發(fā)布,新增多個(gè)實(shí)用特性

    WeBASE是一個(gè)友好、功能豐富的區(qū)塊鏈中間件平臺(tái),通過一系列通用功能組件和實(shí)用工具,助力社區(qū)開發(fā)者更快捷地與區(qū)塊鏈進(jìn)行交互。 目前WeBASE已更新迭代至v3.1.0版本,本次更新中,WeBASE帶來了最新的合約Java腳手架導(dǎo)出功能,完成達(dá)夢(mèng)數(shù)據(jù)庫適配,新增WeBASE CRUD預(yù)編譯接口代

    2024年02月14日
    瀏覽(20)
  • javaScript藍(lán)橋杯---新增地址

    javaScript藍(lán)橋杯---新增地址

    網(wǎng)購大家應(yīng)該再熟悉不過,網(wǎng)購中有個(gè)很難讓人忽略的功能就是地址管理,接下來就讓我們通過完善代碼來探索下地址管理中常用功能的實(shí)現(xiàn)吧~ 本題需要在已提供的基礎(chǔ)項(xiàng)目中使用 JS 知識(shí)完善代碼,最終實(shí)現(xiàn)需求中的具體功能。 開始答題前,需要先打開本題的項(xiàng)目代碼文

    2024年02月08日
    瀏覽(17)
  • 【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    【從零開始學(xué)習(xí)C++ | 第二十一篇】C++新增特性 (上)

    目錄 ?前言: 委托構(gòu)造函數(shù): 類內(nèi)初始化: 空指針: 枚舉類: 總結(jié): ? ? ? ? C++的學(xué)習(xí)難度大,內(nèi)容繁多。因此我們要及時(shí)掌握C++的各種特性,因此我們更新本篇文章,向大家介紹C++的新增特性。 委托構(gòu)造函數(shù)是指一 個(gè)類的構(gòu)造函數(shù)調(diào)用另一個(gè)類的構(gòu)造函數(shù),以減少代

    2024年02月13日
    瀏覽(19)
  • 【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    【從零開始學(xué)習(xí)C++ | 第二十二篇】C++新增特性(下)

    目錄 前言: 類型推導(dǎo): constexpr: 初始化列表: 基于范圍的for循環(huán): 智能指針之unique ptr Lambda表達(dá)式: 總結(jié): ????????本文我們將繼續(xù)介紹? ?C++ 11 新增十大特性的剩余六個(gè),如果沒有看過介紹前四個(gè)特性的小伙伴的可以點(diǎn)進(jìn)我C++的專欄就可以看到。 類型推導(dǎo)(

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包