Die 16. Version der Java SE-Plattform wurde veröffentlicht. Diese Version enthält ungefähr zweieinhalbtausend geschlossene Probleme und 17 JEPs. API-Änderungen können hier eingesehen werden . Versionshinweise hier .
Die Oracle JDK- und OpenJDK- Distributionen stehen bereits zum Download zur Verfügung .
Die JEPs, die es in Java 16 geschafft haben, werden in vier Kategorien unterteilt: Sprache, API, JVM und Infrastruktur.
Zunge
Mustervergleich für die Instanz des Operators (JEP 375)
Der instanceof
Mustervergleichsoperator, der wurde eingeführt in Java 14 und in die zweiten Vorschau in Java 15 wird nun eine stabile Syntax und benötigt nicht länger einen Flag --enable-preview
. Wir haben den Mustervergleich in diesem Artikel ausführlich besprochen , und seitdem wurden zwei Änderungen daran vorgenommen:
Erstens sind Mustervariablen nicht mehr implizit endgültig:
if (obj instanceof String s) {
s = "Hello"; // OK Java 16, Java 15
}
Zweitens, wenn der zur Kompilierungszeit bekannte Typ des Ausdrucks ein Subtyp des zu überprüfenden Typs ist, handelt es sich jetzt um einen Kompilierungsfehler:
String str = ...
if (str instanceof String s) { // O Java 16, OK Java 15
}
Einträge (JEP 395)
, – . preview Java 14 Java 15. . Java 16 : :
public class Outer {
public class Inner {
// OK Java 16, Java 15
static void main(String[] args) {
}
// OK Java 16, Java 15
record Point(int x, int y) {
}
}
}
sealed
( preview) (JEP 397)
- Java contextual keyword restricted keyword restricted identifier, contextual keywords
sealed
,non-sealed
permits
. - ,
sealed
:sealed interface Sealed { } final class Impl implements Sealed { void f(Runnable r) { Sealed s = (Sealed) r; // error: incompatible types } }
-
Class.permittedSubclasses()
Class.getPermittedSubclasses()
.
JVM
JDK (JEP 396)
API JDK, Java 9, : Java 9-15 --illegal-access
permit
, Java 16 deny
. , API (sun.*
, com.sun.*
, jdk.internal.*
..) .
JDK , Java 16, JVM:
--illegal-access=permit/warn/debug
: JDK--add-opens=module/package=target-module
:--add-exports=module/package=target-module
: ( )
--illegal-access
. Java 16, : Option --illegal-access is deprecated and will be removed in a future release
.
API jdk.unsupported
: sun.misc
sun.reflect
.
Warnings for Value-Based Classes (JEP 390)
- (Integer
, Double
, Character
..) value-based , , deprecated Java 9, deprecated for removal.
value-based API Java 8. , , , identity: ==
, , identityHashCode()
.. Value-based Valhalla, .
value-based :
Double d = 0.0;
synchronized (d) { // warning: [synchronization] attempt to synchronize on an instance of a value-based class
}
value-based JVM:
-XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=1
: .-XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=2
: .
ZGC: Concurrent Thread-Stack Processing (JEP 376)
ZGC safepoints . .
Unix-Domain Socket Channels (JEP 380)
Unix socket channel server-socket channel API. , , . Unix Windows 10 Windows Server 2019.
Elastic Metaspace (JEP 387)
Metaspace ( JVM, ) . , .
Alpine Linux Port (JEP 386)
JDK Alpine Linux Linux, musl C. Alpine Linux , . JDK .
Windows/AArch64 Port (JEP 388)
JDK Windows/AArch64. Java Windows on ARM, .
API
Stream
java.util.stream.Stream
JEP, , .
– Stream.toList()
. Stream
. , Collectors.toUnmodifiableList()
, , Stream.toList()
, null
-.
– Stream.mapMulti()
( ). Stream.flatMap()
: flatMap()
, Stream
, mapMulti()
, – , – Consumer, . :
IntStream.rangeClosed(1, 10).mapMulti((i, consumer) -> {
for (int j = 1; j <= i; j++) {
consumer.accept(j);
}
}); // 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, ...
(JEP 392)
jpackage
, Java 14 , .
Vector API (Incubator) (JEP 338)
SIMD- (x64 AArch64). API , JVM . , , .
API jdk.incubator.vector
.
Foreign Linker API (Incubator) (JEP 389)
API, Panama – Foreign Linker API. Java, JNI: , .
Foreign-Memory Access API (Third Incubator) (JEP 393)
API Java, Java 14, .
Enable C++14 Language Features (JEP 347)
JDK Java 16 C++98/03. Java 11 , C++11/14. : HotSpot C++11/14, .
Migrate from Mercurial to Git (JEP 357) Migrate to GitHub (JEP 369)
JDK Git GitHub. 2020 , Java 16 .
GitHub . -, . Skara.
Java 16 STS-, .
Wenn Sie die Nachrichten über Java nicht verpassen möchten, abonnieren Sie den miniJUG-Telegrammkanal