Änderungen von Java 8 zu Java 11

Java 8 bis Java 11

http://openjdk.java.net/projects/jdk9/ http://cr.openjdk.java.net/~iris/se/9/latestSpec/apidiffs/overview-summary.html

https://openjdk.java.net/projects/jdk/10/ http://cr.openjdk.java.net/~iris/se/10/latestSpec/apidiffs/overview-summary.html

https://openjdk.java.net/projects/jdk/11/ http://cr.openjdk.java.net/~iris/se/11/latestSpec/apidiffs/overview-summary.html

Sprache

Erstens ist der Sprachwechsel.

var http://openjdk.java.net/jeps/286 Sie können jetzt Infer über lokale Variablen eingeben.

var a = "Foo";

Ich denke, das Folgende ist eine gute Richtlinie.

Wenn eine Variable der Wrapper-Klasse verwendet wird, wird null behandelt. Ich denke, es ist besser, den Typ anzugeben. Wenn Sie nicht null verwenden, verwenden Sie den Basistyp. Bei Anwendung auf Punkt 1 ist der folgende Schreibstil in Ordnung.

var count = Long.valueOf("123");

Für die Methoden "Integer" und "Long" gibt es jedoch einige, die den Basistyp zurückgeben, und einige, die den Wrapper-Typ zurückgeben. Daher ist es sicherer, den Typ anzugeben. Wenn Sie es mit var erhalten, ist es besser, es zu einem Basistyp zu machen.

private interface methods http://openjdk.java.net/jeps/213

Sie können jetzt private Methoden für die Schnittstelle verwenden.

Da die statische Methode und die Standardmethode in Java8 verwendet werden können, kann die allgemeine Verarbeitung in "privat" geschrieben werden.

effective final in try-with-resource http://openjdk.java.net/jeps/213

Es ist jetzt möglich, nur Variablen mit Try-with-Resource für praktisch endgültige Variablen anzugeben. Wenn Sie bisher eine außerhalb von "try" definierte "Closable" -Variable automatisch mit "try-with-resource" schließen wollten, mussten Sie sie einer anderen Variablen zuweisen. Wenn Sie es beispielsweise endgültig verwenden möchten, müssen Sie eine Variable außerhalb von try definieren. In einem solchen Fall können Sie sie jedoch verwenden.

var io = new InputStream();
try (var io2 = io) {
  ...
}

var io = new InputStream();
try (io) {
  ...
}

<> in anonymous Anonyme Klassen können jetzt mit dem Diamantoperator vom Typ abgeleitet werden.

List<String> strs = new ArrayList<>() {{
  this.add("aa");
  this.add("bb");
}};

_ Nicht verfügbar

Sie können _ nicht mehr als Variable verwenden.

API

Von hier aus werden wir die Änderungen in der Standardbibliothek für jede Klasse zusammenfassen.

Klicken Sie hier für die Java 11 API https://nowokay.hatenablog.com/entry/20180704/1530712754

java.lang

String Compact String http://openjdk.java.net/jeps/254 Es ist in Java 9 enthalten. Bis Java8 wurden Zeichen in UTF-16 als Zeichen gespeichert, sodass für jedes Zeichen 2 Byte verwendet wurden. Zeichenfolgen, die nur ASCII-Zeichen wie Alphabete und Zahlen enthalten, werden jetzt in 1 Byte gespeichert.

Indy String concatenation http://openjdk.java.net/jeps/280

Bisher wurde die Verkettung von Zeichenfolgen mit "+" zu "StringBuilder" erweitert, sie wird jedoch zur Laufzeit mit Invoke Dynamic bestätigt.

"aa"+ a

new StringBuilder("aa").append(a);

↓ Dynamic Invoke

repeat(n) Kann wiederholt werden

jshell> "test".repeat(3)
$1 ==> "testtesttest"

isBlank()

isBlank ist ein UTF-Leerzeichen

strip() / stripLeading() / stripTrailing()

UTF-Version von trim () / trimLeft () / trimRight ()

lines()

Gibt für jeden Zeilenumbruch einen Stream von Zeichenfolgen zurück

"test\nprogram\n".lines()
  .map(String::strip)
  .collect(Collectors.joining("\n")

Auf diese Weise kann der Platz vor und nach jeder Zeile entfernt werden.

java.util

List/Set/Map of http://openjdk.java.net/jeps/269

Gibt eine unveränderliche Sammlung zurück

var strs = List.of("apple", "banana");
var sets = Set.of("apple", "banana");
var dict = Map.of(
  "apple", "Apfel",
  "banana", "Banane");

copyOf Gibt eine unveränderliche Kopie zurück

Map ofEntries() / entry()

Map wird nicht nur of, sondern auch ofEntries () hinzugefügt.

var map = Map.ofEntries(
  entry("key1", "value1"),
  entry("key2", "value2"));

Predicate not

Bequeme Inversion der Methodenreferenz

lines.stream()
  .filter(not(String::isEmpty))
  .forEach(System.out::println);

Collection toArray(IntFunction)

Bei der Konvertierung von List usw. in ein Array musste im Voraus ein Array mit derselben Größe vorbereitet werden. Sie können jedoch ein Array wie strs.toArray (String [] :: new) generieren

Stream dropWhile / takeWhile

In Java 8 war eine Stream-Verarbeitung wie "von Anfang bis Ende in Daten" nicht möglich, kann jedoch mithilfe von dropWhile / takeWhile implementiert werden, das in Java 9 eingeführt wurde.

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
start
two
three

In diesem Fall enthält es bis zu "Start", Sie müssen es also überspringen.

jshell> Stream.of("one", "start", "two", "three", "end", "four").
   ...> dropWhile(s -> !s.equals("start")).
   ...> skip(1).
   ...> takeWhile(s -> !s.equals("end")).
   ...> forEach(System.out::println)
two
three

ofNullable

iterate

Wütend mit zwei Argumenten ist seit Java8 verfügbar, aber es war notwendig, eine Stoppbedingung mit Limit usw. festzulegen.

IntStream.iterate(0, i -> i + 3).limit(5)
  .forEach(System.out::println);

Ich hatte auch kein "takeWhile", daher war es ziemlich schwierig zu bedienen. Und jetzt können Sie "iterate" in Kombination mit "takeWhile" verwenden. Sie können es also wie eine for-Anweisung verwenden.

IntStream.iterate(0, i -> i < 10, i -> i + 3)
  .forEach(System.out::println);

Wenn Sie dies folgendermaßen schreiben, wird es nicht zurückkommen. Überlegen Sie warum.

IntStream.iterate(0, i -> i < 10, i -> i++)
  .forEach(System.out::println);

Ich kann dies tun

IntStream.iterate(0, i -> i < 10, i -> ++i)
  .forEach(System.out::println);

Optional/OptionalInt/OptionalLong/OptionalDouble orElseThrow() isEmpty() stream()

Das Konvertieren von Optional zu Stream war noch nie einfacher. Dadurch entfällt die Notwendigkeit, einen Filter (Optional :: isPresent) einzufügen, wenn ein Optional in einem Stream zurückgegeben wird. Zum Beispiel, wenn getById Optional zurückgibt

ids.map(Data::getById)
   .filter(Optional::isPresent)
   .collect(Collectors.toList())

Wie ich es gemacht habe

ids.flatMap(id -> getById(id).stream())
   .collect(Collectors.toList())

Mit flatMap können Sie so schreiben.

ifPresentOrElse or

Wenn Optional leer ist, ist es einfacher, etwas wie das folgende Optional zu schreiben.

Collectors toUnmodifiableList / toUnmodifiableSet / toUnmodifiableMap

Kollektor, der Werte in unveränderlichen Sammlungen speichert

filtering flatMapping

Enumeration asIterator

Objects requireNonNullElse requireNonNullElseGet

java.io

Path of

Files writeString

Das Schreiben von Text in eine Datei erfolgt in einer Zeile.

readString

Das Lesen von Text aus einer Datei erfolgt in einer Zeile.

Reader transferTo

Das Schreiben des vom Reader gelesenen Inhalts in Writer erfolgt in einer Zeile

nullReader Writer nullWriter

InputStream transferTo

Das Schreiben des von InputStream gelesenen Inhalts in OutputStream erfolgt in einer Zeile

nullInputStream

OutputStream nullOutputStream

java.net.http

Der HTTP-Zugriff wurde überarbeitet.

JVM

Log http://openjdk.java.net/jeps/158 http://openjdk.java.net/jeps/271

G1GC is the default GC http://openjdk.java.net/jeps/248

ZGC

CMS is deprecated http://openjdk.java.net/jeps/291

Ahead of time compilation http://openjdk.java.net/jeps/295

Funktion

JShell http://openjdk.java.net/jeps/222

Launch Single-File Source-Code Programs

Sie können jetzt einen Java-Quellcode mit Java-Befehlen ausführen, ohne ihn mit Javac zu kompilieren.

Module System

Java EE and CORBA is dropped

Recommended Posts

Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Von Java zu Ruby !!
Migration von Cobol nach JAVA
Neue Funktionen von Java7 bis Java8
Stellen Sie eine Verbindung von Java zu PostgreSQL her
Von ineffektivem Java zu effektivem Java
Java soll ab heute dabei sein
Von Java zu VB.NET-Writing Kontrastmemo-
Java, Schnittstelle für Anfänger
Der Weg von JavaScript nach Java
[Java] Konvertierung von Array zu Liste
Änderungen in Java 11
[Java] Einführung in Java
Einführung in Java
Konvertieren Sie von der Java-UTC-Zeit in die JST-Zeit
Stellen Sie mit Eclipse eine Verbindung von Java zu MySQL her
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Von der Installation von Eclipse bis zur Ausführung von Java (PHP)
Post to Slack von Play Framework 2.8 (Java)
Java: So senden Sie Werte von Servlet zu Servlet
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
[Java] Fluss vom Quellcode zur Ausführung
Einführung in die Überwachung von Java Touching Prometheus
Vorsichtsmaßnahmen bei der Migration von VB6.0 auf JAVA
Memo für die Migration von Java nach Kotlin
Typkonvertierung vom Java Big Decimal-Typ zum String-Typ
Rufen Sie Java von JRuby aus auf
[Java] Von zwei Listen zu einer Array-Liste
Upsert von Java SDK zu Azure Cosmos DB
R von Java ausführen Ich möchte rJava ausführen
Migrieren Sie von JUnit 4 zu JUnit 5
Stellen Sie über eine Java-Anwendung eine Verbindung zu Aurora (MySQL) her
Um ein VB.net-Programmierer aus einem Java-Shop zu werden
Eval Java-Quelle von Java
[Java] Stellen Sie eine Verbindung zu MySQL her
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
So erhalten Sie eine Klasse von Element in Java
Greifen Sie über Java auf API.AI zu
Kotlins Verbesserungen an Java
[Java] So wechseln Sie von Open JDK zu Oracle JDK
Ich möchte schnell von Java nach SQLite schreiben
Einführung in den Java-Befehl
Minecraft BE Serverentwicklung von PHP nach Java
Wählen Sie * aus dem Java SDK in Azure Cosmos DB
Starten Sie Docker von Java aus, um Office-Dokumente in PDF zu konvertieren
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
[Java] Ich möchte die Differenz zum Datum berechnen
So springen Sie von Eclipse Java zu einer SQL-Datei
Wie schreibe ich Scala aus der Perspektive von Java
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
6 Funktionen, die ich nach meiner Rückkehr von Scala nach Java verpasst habe
So wechseln Sie von Oracle Java 8 zu Adopt Open JDK 9
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
Generieren Sie Modelle von JSON zu Swift, PHP, C #, JAVA
[Java] Plattformen zur Auswahl für die Java-Entwicklung ab sofort (2020)
Von iBATIS zu MyBatis3 verschoben
Versuchen Sie Spring Boot von 0 bis 100.
[Java] Verwendung von Map