Java Version 8 und neuere Funktionen

Dieser Artikel beschreibt die Funktionen von ** Java ** Version 8 und höher aus Entwicklersicht und beschreibt, wie Entwickler sie verwenden können, um die Leistung zu verbessern.

Von Leijuan, Senior Technical Expert der Alibaba Group

Programmiersprachen wie Python und JavaScript werden immer beliebter. Die ehemals dominierende Sprache Java bleibt jedoch trotz des Verlusts an Gunst an der Spitze der verschiedenen Ranglisten der wichtigsten Programmiersprachen. Java bleibt die Sprache Nummer eins für die Anwendungsentwicklung für Mainstream-Unternehmensanwendungen. Seit dem Start von Java 8 hat Java viele nützliche neue Sprachfunktionen und Tools eingeführt, um die Leistung zu verbessern. Viele Programmierer haben jedoch kein Upgrade auf Java 8 oder eine spätere Version für die Entwicklung durchgeführt. Aus Entwicklersicht beschreibt dieser Artikel Java-Sprachfunktionen in Java 8 und späteren Versionen.

Erstens ist Java 8 für die meisten Java-Programmierer wohl eine bahnbrechende Version. Die bekanntesten Funktionen sind Stream- und Lambda-Ausdrücke, die eine funktionale Programmierung ermöglichen und Java aktivieren. Genau aus diesem Grund sind viele Cloud-Anbieter seit langem aktiv und unterstützen Java 8 hervorragend, obwohl Oracle die Aktualisierung eingestellt hat.

Installation des Alibaba Cloud SDK für Java

Viele Programmierer haben für die Entwicklung kein Upgrade auf eine spätere Version als Java 8 durchgeführt. Daher behandeln wir spätere Versionen von Sprachfunktionen. Dieser Artikel konzentriert sich auf die Entwicklung und überspringt Garbage Collections (GCs), Compiler, Java-Module und Plattformen. Diese Themen können in anderen Artikeln behandelt werden. Die folgenden Funktionen spielen beim Schreiben von Code eine Rolle:

Mit Java 13 werden in Kürze alle Java-Versionen von Java 9 bis Java 13 abgedeckt. Java-Versionen wurden optimiert, je nach Version wurde eine Vorschau eingeführt, und dann werden Verbesserungen und Verbesserungen basierend auf dem Feedback der Benutzer vorgenommen. In diesem Artikel wird nicht speziell darauf hingewiesen, welche Version welche Funktion hat. Sie können sich dies jedoch als eine Mischung aus Funktionen aller Versionen von Java 8 und höher vorstellen. Die Quelle dieses Artikels ist eine detaillierte Einführung in jede Java-Version im Abschnitt "Features and Pluralsight" der offiziellen Java-Website.

Var - Inferenz des lokalen Variablentyps

Java unterstützt Generika, aber wenn der Typ die Länge nicht wirklich interessiert, verwenden Sie das Schlüsselwort var. Dies vereinfacht Ihren Code erheblich. Die Java-IDE funktioniert perfekt mit var, sodass Sie sich nicht oft mit Code-Hinweisen befassen müssen.


Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<String, List<Map<String,Object>>>();
        Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<>();
        Map<String, List<Map<String,Object>>>  store = new ConcurrentHashMap<String, List<Map<String,Object>>>();
  //lambda
  BiFunction<String, String, String> function1 = (var s1, var s2) -> s1 + s2;
        System.out.println(function1.apply(text1, text2));

Kopieren Sie die confd-Datei in das bin-Verzeichnis und starten Sie confd.

sudo cp bin/confd /usr/local/bin
confd

In der Praxis werden einige kleine Einschränkungen erwartet, z. B. das Zuweisen eines Werts zu einem Nullwert. Dies sind jedoch keine großen Probleme, sodass Sie sofort loslegen können.

Prozesshandle

Das Aufrufen von Systembefehlen in Java ist selten. Natürlich verwenden Sie dafür meistens Process Builder. Eine weitere Funktion ist die Verbesserung des Prozesshandles, mit der die Aktualisierungsinformationen anderer Prozesse abgerufen werden können. ProcessHandle ist nützlich, um den Startbefehl und die Startzeit aller Prozesse, eines bestimmten Prozesses usw. abzurufen.

ProcessHandle ph =  ProcessHandle.of(89810).get();
System.out.println(ph.info());

Sammelfabrikmethode

Haben Sie noch keine ArrayList oder HashSet mit der neuen Methode erstellt? Sie können zu spät sein. Verwenden wir die Factory-Methode direkt.

Set<Integer> ints = Set.of(1, 2, 3);
List<String> strings = List.of("first", "second");

Neue API für Zeichenfolgenklassen

Es ist nicht möglich, alle neuen APIs hier aufzulisten, aber mit einigen wichtigen APIs können Sie die StringUtils von Drittanbietern entfernen. Die folgenden APIs sind repeat, isEmpty, isBlank, strip, line, indent, transform, trimIndent, formatiert.

Unterstützt HTTP 2

Es ist einfacher, OkHTTP 3 zu verwenden, aber wenn Sie keine anderen Entwicklungspakete möchten und sich an HTTP 2 halten möchten, ist das in Ordnung. Java unterstützt HTTP 2 und unterstützt sowohl synchrone als auch asynchrone Programmiermodelle. Auch der Code ist grundsätzlich der gleiche.

HttpClient client = HttpClient.newHttpClient();
        HttpRequest req =
                HttpRequest.newBuilder(URI.create("https://httpbin.org/ip"))
                        .header("User-Agent", "Java")
                        .GET()
                        .build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        System.out.println(resp.body());

Textblock (JDK 13)

In früheren Versionen mussten Sie lange Sätze eingeben und doppelte Anführungszeichen vermeiden. Die Lesbarkeit wird schlechter. Zum Beispiel:

String jsonText = "{"id": 1, "nick": "leijuan"}";

Neue Methode des Textblocks:

//language=json
  String cleanJsonText = """
        {"id": 1, "nick": "leijuan"}""";

Es ist viel einfacher, nicht wahr? Sie müssen sich keine Gedanken darüber machen, doppelte Anführungszeichen zu vermeiden oder Kopien zu teilen und zu konvertieren, indem Sie sich auf das Schreiben von Code konzentrieren.

Warten Sie eine Minute, was wird die // language = json hinzugefügt, bevor cleanJsonText? Dies ist eine Funktion von IntelliJ IDEA und die Textblöcke sind semantisch. Wenn Sie Ihrem HTML-, JSON- oder SQL-Code // language = json hinzufügen, erhalten Sie sofort einen Code-Hinweis.

Textblöcke entsprechen auch grundlegenden Vorlagenmerkmalen. Fügen Sie eine Kontextvariable in den Textblock ein und geben Sie% s ein, um die formatierte Methode aufzurufen. Damit ist Ihre Arbeit abgeschlossen.

//language=html
    String textBlock = """
    <span style="color: green">Hello %s</span>""";
    System.out.println(textBlock.formatted(nick));

Verbesserungen wechseln

Pfeiletiketten

Mit der Einführung des Schalterpfeils "→" müssen nicht mehr so viele Zeilenumbrüche vorgenommen werden. Der Beispielcode wird unten vorgestellt.

//legacy
    switch (DayOfWeek.FRIDAY) {
        case MONDAY: {
            System.out.println(1);
            break;
        }
        case WEDNESDAY: {
            System.out.println(2);
            break;
        }
        default: {
            System.out.println("Unknown");
        }
    }
    //Arrow labels
    switch (DayOfWeek.FRIDAY) {
        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);
    }

Formel wechseln

Dies bedeutet, dass der Schalter einen Rückgabewert hat. Der Beispielcode ist unten dargestellt.

//Yielding a value
    int i2 = switch (DayOfWeek.FRIDAY) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY -> 7;
        case THURSDAY, SATURDAY -> 8;
        case WEDNESDAY -> 9;
        default -> {
            yield 10;
        }
    };

Die Schlüsselwortausbeute repräsentiert den Rückgabewert des Schalterausdrucks.

Verwendung dieser Funktionen

Alle diese Funktionen sehen gut aus, aber wie können Sie sie verwenden, während Sie noch in Java 8 arbeiten? Was können wir außer der Berücksichtigung dieser Funktionen noch tun? Bitte mach dir keine Sorgen. Ich habe eine Lösung gefunden.

Dieses Element unterstützt das transparente Kompilieren der gesamten JDK 12+ -Syntax in Java 8-VMs. Mit anderen Worten, das Ausführen dieser Syntaxen unter Java 8 ist kein Problem. Alle diese Funktionen sind auch in der Java 8-Umgebung verfügbar.

Wie kann es also verwendet werden? Es ist alles sehr einfach und leicht.

Laden Sie zunächst das neueste JDK herunter, z. B. JDK 13, und fügen Sie Ihren Abhängigkeiten das Jabel-Java-Plugin hinzu.

<dependency>
            <groupId>com.github.bsideup.jabel</groupId>
            <artifactId>jabel-javac-plugin</artifactId>
            <version>0.2.0</version>
  </dependency>

Optimieren Sie dann das Compiler-Plug-In von Maven und stellen Sie die Quelle auf die erforderliche Java-Version ein, z. B. Java 13. Ziele und Releases können auf Java 8 festgelegt werden. IntelliJ IDEA kann automatisch erkannt werden und muss nicht angepasst werden.

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>13</source>
                    <target>8</target>
                    <release>8</release>
                </configuration>
</plugin>

Beginnen wir mit diesen Funktionen eine angenehme Erfahrung.

Überblick

In diesem Blog haben wir einige der beliebtesten und nützlichsten Funktionen in Java behandelt. Einige nützliche Funktionen, wie z. B. API-Optimierungen, werden in diesem Artikel nicht erwähnt. Sie können es jedoch jederzeit über Blogs und Foren mit unserer Community teilen.

Recommended Posts

Java Version 8 und neuere Funktionen
Java-Funktionen
Java-Funktionen
Java 9 neue Funktionen und Beispielcode
[Java] Informationen zu Java 12-Funktionen
Java-Versionsprüfung
Informationen zu Java-Funktionen
Java1.8 neue Funktionen
Java und JavaScript
Laden Sie Eclipse (Java) herunter und installieren Sie es (Mac-Version)
XXE und Java
Lesen Sie den Hinweis zur Dateikopie von Java 1.7 oder höher
Voraussichtliche Funktionen von Java
[Java] PDF-Version konvertieren
Getter und Setter (Java)
[Java] Thread und ausführbar
Java wahr und falsch
Vergleich der Java-Versionsnotation
[Java] Vergleich von Zeichenketten und && und ||
Java-Version wechseln (Denkmal)
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
timedatectl und Java TimeZone
[Java] Verzweigen und Wiederholen
[Java] Variablen- und Typtypen
[Java] Drei Funktionen von Java
Java (Klasse und Instanz)
[Java] Überladen und überschreiben
Studiere Java # 2 (\ mark and operator)
Lernen von Java Framework # 1 (Mac-Version)
Java-Versionsverwaltung unter macOS
So senken Sie die Java-Version
[Java] Unterschied zwischen == und gleich
[Java] Stapelbereich und statischer Bereich
[Java] Generics-Klasse und Generics-Methode
Java-Programmierung (Variablen und Daten)
Java-Ver- und Entschlüsselung PDF
Neue Funktionen von Java7 bis Java8
Java und Iterator Teil 1 Externe Iterator Edition
Micronaut CLI-Profile und -Funktionen
Java-Versionsverwaltung mit SDKMAN
Java if- und switch-Anweisungen
Definition und Instanziierung von Java-Klassen
Apache Hadoop und Java 9 (Teil 1)
[Java] Über String und StringBuilder
[Java] HashCode und gleich Überschreibung
Java-Versionsverwaltung mit jenv
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Java-Methoden und Methodenüberladungen
Ändern Sie die Java-Version unter CentOS
Java Generics T und? Unterschied
Vor- und Nachteile von Java
Vereinfachen Sie das Umschalten der Java-Version (Mac)
Java (bedingte Verzweigung und Wiederholung)
Über Java-Paket und Import
[Java] Laden Sie ein Bild hoch und konvertieren Sie es in Base64
C # und Java überschreiben Story
Java abstrakte Methoden und Klassen
Java während und für Anweisungen
Java-Kapselung und Getter und Setter
Durchsuchen Sie Java und MySQL PATH mit Umgebungsvariablen [Windows-Version]