Java 9 Try-with-Resources: Effektiv-finale Variablen direkt nutzen
Die Verbesserung
Java 7 führte try-with-resources ein, aber die Ressource musste innerhalb der try(...) Klammern neu deklariert werden (oder eine frische Variable zugewiesen werden). Java 9 erlaubt: Effektiv-finale Variablen (bereits initialisiert, nicht mehr geändert) direkt in try(...) zu verwenden.
Vor Java 9 (umständlich)
Reader input = new StringReader("test");
BufferedReader br = new BufferedReader(input);
try (BufferedReader br2 = br) { // Neue Variable nötig!
return br2.readLine();
}
Ab Java 9 (sauber)
Reader input = new StringReader("test");
BufferedReader br = new BufferedReader(input);
try (br) { // Direkte Nutzung der effektiv-finalen Variable 'br'
return br.readLine();
}
Regeln
- Die Variable muss effektiv final sein: einmal initialisiert, nie wieder zugewiesen.
finalKeyword ist optional, aber empfohlen für Klarheit.- Funktioniert mit jeder
AutoCloseable/CloseableRessource. - Mehrere Ressourcen:
try (res1; res2; res3) { ... }(Semikolon-getrennt).
Vollständiges Beispiel
import java.io.*;
public class TryWithResourcesDemo {
public static void main(String[] args) throws IOException {
System.out.println(readData("Hallo Java 9!"));
}
static String readData(String message) throws IOException {
Reader inputString = new StringReader(message);
BufferedReader br = new BufferedReader(inputString);
try (br) { // Java 9: effektiv-final 'br' direkt nutzbar
return br.readLine();
}
}
}
Warum ist das nützlich?
- Vermeidet „Dummy-Variablen“ (
br2,in2…). - Ermöglicht klare Trennung: Ressource erstellen (z. B. Factory-Methode) → verwenden in
try. - Verbessert Lesbarkeit bei komplexer Ressourcen-Erstellung:
// Factory liefert bereits konfigurierte Resource
final var conn = DataSource.getConnection(); // effektiv final
try (conn) {
// arbeiten mit conn
}
Zusammenfassung
Ein kleines, aber feines Syntax-Sugar-Feature, das Boilerplate reduziert und Code klarer macht – typisch für Java 9s Fokus auf Developer Experience.
Java
- Java Exception Handling meistern: Try, Catch, Finally und Ressourcen
- Java String length() Methode: String-Länge ermitteln (Beispiel)
- Java String.indexOf() meistern: Substrings finden & praktische Beispiele
- Java String.charAt(): Syntax, Rückgabetyp, Exceptions und praktisches Beispiel
- Java String compareTo() meistern: Syntax, Anwendungsfälle und praktische Beispiele
- Java String.contains() Methode: Substrings prüfen – praktische Beispiele
- Java String.endsWith(): String-Suffixe prüfen mit Beispielen
- Dateien in Java mit BufferedReader lesen – Praktischer Leitfaden mit Beispielen
- Insertion Sort Algorithmus in Java: Klares Beispiel & Schritt-für-Schritt-Anleitung
- Selection Sort in Java: Schritt-für-Schritt-Beispiel & Vollständiger Code