[JAVA] JDK12, mit dem Sie das Gefühl haben, in 3 Minuten verstanden zu haben

Java Adventskalender 2018 Dies ist der Artikel am 14. Tag. JDK12 wird nächstes Jahr veröffentlicht, daher hier einige der 12 Änderungen.

Features JEP (JDK Enhancement Proposal) in JDK12 ist wie folgt Stand 06.12.2008

89: Shenandoah: A Low-Pause-Time Garbage Collector   (Experimental) 230: Microbenchmark Suite 325: Switch Expressions (Preview) ** 326: Raw String Literals (Vorschau) ** ← Kann aus JDK12 entfernt werden (aktualisiert am 14.12.2008) 334: JVM Constants API 340: One AArch64 Port, Not Two 341: Default CDS Archives 344: Abortable Mixed Collections for G1 346: Promptly Return Unused Committed Memory from G1

https://openjdk.java.net/projects/jdk/12/

In diesem Artikel haben zwei Änderungen an der Java-Syntax viele Java-Programmierer beeinflusst.

Ich werde darüber erklären.

JEP325: Switch Expressions (Preview) Es ist eine Spezifikation von Project Amber. Eine leicht verbesserte Darstellung der Switch-Syntax von Java.

Bisher war die Switch-Syntax nicht intuitiv, da sie von der Reihenfolge abhing, in der break-Anweisungen angezeigt wurden, und dies wurde zur Quelle potenzieller Fehler.

//Switch-Anweisung bisher
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

Das Folgende ist eine verbesserte switch-Anweisung

//Verbesserte switch-Anweisung
switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

Ziemlich erfrischt: entspannt:

Zuordnungsfall zur Variablen

Ein häufiger Fall bei switch-Anweisungen ist die Zuweisung zu einer Variablen.

//Switch-Anweisung bisher
int numLetters;
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        numLetters = 6;
        break;
    case TUESDAY:
        numLetters = 7;
        break;
    case THURSDAY:
    case SATURDAY:
        numLetters = 8;
        break;
    case WEDNESDAY:
        numLetters = 9;
        break;
    default:
        throw new IllegalStateException("Wat: " + day);
}

Der Zuweisungsprozess wird jeweils geschrieben, kann aber wie folgt geschrieben werden.

//Verbesserte switch-Anweisung
int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

Sie können auch so schreiben.

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY: break 6;
    case TUESDAY:                break 7;
    case THURSDAY, SATURDAY:     break 8;
    case WEDNESDAY:              break 9;
};

Fehlermuster

Einige Dinge, auf die Sie achten sollten

Fall 1

final int num = 3;
String str = switch(num) {
    case 1 -> "one";
    case 2 -> "two";
};

Diese Schreibweise führt zu einem Kompilierungsfehler. Die Fehlermeldung lautet "Der Schalterausdruck deckt nicht alle möglichen Eingabewerte ab". Mit anderen Worten, decken Sie alle möglichen Werte des switch-Arguments als bedingten Zweig des Switch ab! Das ist.

In diesem Fall schreiben Sie alle möglichen Werte von int, falls gelöst werden soll: rollende_eyes: (dumm Wenn Sie stattdessen Standard schreiben, ist der Build erfolgreich.

final int num = 3;
String str = switch(num) {
    case 1 -> "one";
    case 2 -> "two";
    default -> "non";
};

Fall 2

final int num = 3;
String str = switch(num) {
    case 1: break "one";
    case 2 -> "two";
    default -> "non";
};

Dies führt auch zu einem Kompilierungsfehler. Die Fehlermeldung lautet "verschiedene Fallarten, die im Switch verwendet werden". Vereinheitlichen Sie den Schreibstil! Das.

326: Raw String Literals (Preview) Die Darstellung von String-Literalen wird vereinfacht. Wenn Sie URL-Pfade, reguläre Ausdrücke und mehrzeilige Zeichenfolgen in den Quellcode schreiben, hat das Escape- und Einfügen von Zeilenumbrüchen die Produktivität und Lesbarkeit verringert, Sie sind jedoch von solchen Belästigungen befreit.

Fügen Sie die Zeichenfolge in "` (hintere Anführungszeichen) "anstelle von" "(doppelte Anführungszeichen)" ein.

Beispiel für einen Dateipfad

Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar");
Runtime.getRuntime().exec(`"C:\Program Files\foo" bar`);

Beispiel für einen regulären Ausdruck

System.out.println("this".matches("\\w\\w\\w\\w"));
System.out.println("this".matches(`\w\w\w\w`));

Mehrzeiliges Beispiel

String html = "<html>\n" +
              "    <body>\n" +
              "		    <p>Hello World.</p>\n" +
              "    </body>\n" +
              "</html>\n";
String html = `<html>
                    <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

Schließlich

Beide haben den Vorschau-Status, daher kann es in Zukunft zu Änderungen kommen, und ich denke, dass JDK13 oder höher in der tatsächlichen Produktion (Geschäft) verwendet werden kann. Also genieße es so viel du kannst und berühre mit JDK12. Wenn Sie beim Kompilieren und Ausführen nicht die Option "--enable-Preview" hinzufügen, tritt ein Fehler auf.

Recommended Posts

JDK12, mit dem Sie das Gefühl haben, in 3 Minuten verstanden zu haben
Eine einfache Analogie von Java-Klassen, -Instanzen und -Objekten. .. .. [Serie, in der du das Gefühl hast zu verstehen]
[Für Anfänger] Sie werden es in 10 Minuten definitiv verstehen! Was sind Java Beans?
Verstehe in 5 Minuten !! Wie man Docker benutzt
[Java] Verstehe in 10 Minuten! Assoziatives Array und HashMap