Java 10: 70+ neue APIs – Unmodifiable Collections, Optional.orElseThrow() & mehr
Wichtigste API-Erweiterungen in Java 10
1. Optional.orElseThrow()
Neue Methode in java.util.Optional, OptionalInt, OptionalLong, OptionalDouble. Bevorzugte Alternative zu get(), da sie explizit ein NoSuchElementException wirft (statt undokumentiertem Verhalten).
String value = optional.orElseThrow(); // wirft NoSuchElementException wenn leer
String value = optional.orElseThrow(() -> new MyException("Fehlend"));
2. Unmodifiable Collections Factory & Collectors
Interfaces: List.copyOf(coll), Set.copyOf(coll), Map.copyOf(map) – erstellen flache, unveränderliche Kopien.
Collectors (java.util.stream.Collectors):
toUnmodifiableList()toUnmodifiableSet()toUnmodifiableMap(keyMapper, valueMapper)/toUnmodifiableMap(keyMapper, valueMapper, mergeFn)
Jeder Modifikationsversuch wirft UnsupportedOperationException.
3. JRE Last Usage Tracking deaktivieren
Neuer Flag: -XX:+DisableLastUsageTracking (bzw. jdk.disableLastUsageTracking) deaktiviert die Aufzeichnung der letzten JRE-Nutzung für die laufende VM.
4. Gehashte Passwörter in JMX
Passwörter in jmxremote.password werden nun beim Start vom JMX-Agent mit SHA3-512 gehasht (nicht mehr im Klartext).
5. Javadoc-Verbesserungen
--add-stylesheet: Mehrere Stylesheets für generierte Docs.--overridden-methods=value: Gruppiert überschriebene Methoden mit geerbten, statt sie separat zu dokumentieren.- Inline-Tag
{@summary ...}: Explizite Zusammenfassung für API-Beschreibungen (statt erster Satz).
Code-Beispiel: Unmodifiable Collections
import java.util.List;
import java.util.stream.Collectors;
public class ApiDemo {
public static void main(String[] args) {
var ids = List.of(1, 2, 3, 4, 5);
// copyOf – unmodifiable Kopie
try {
List<Integer> copy = List.copyOf(ids);
copy.add(6); // UnsupportedOperationException
} catch (UnsupportedOperationException e) {
System.out.println("Collection ist nicht modifizierbar.");
}
// Collector toUnmodifiableList
try {
List<Integer> evens = ids.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toUnmodifiableList());
evens.add(6); // UnsupportedOperationException
} catch (UnsupportedOperationException e) {
System.out.println("Collection ist nicht modifizierbar.");
}
}
}
Ausgabe:
Collection ist nicht modifizierbar.
Collection ist nicht modifizierbar.
Weitere erwähnenswerte Änderungen
Reader.transferTo(Writer),InputStream.transferTo(OutputStream)– effizientes Kopieren ohne Puffer-Management.CompletableFutureneue Factory-Methoden (siehe separater Artikel zu Java 9/10 CompletableFuture-Verbesserungen).- Performance-Verbesserungen bei
String,Collection,Class-Ladung.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Autoboxing und Unboxing meistern: Praktische Beispiele und Best Practices