Private Interface-Methoden
Gemeinsame Logik in Interfaces mithilfe privater Methoden auslagern.
Code-Vergleich
✕ Java 8
interface Logger {
default void logInfo(String msg) {
System.out.println(
"[INFO] " + timestamp() + msg);
}
default void logWarn(String msg) {
System.out.println(
"[WARN] " + timestamp() + msg);
}
}
✓ Java 9+
interface Logger {
private String format(String lvl, String msg) {
return "[" + lvl + "] " + timestamp() + msg;
}
default void logInfo(String msg) {
IO.println(format("INFO", msg));
}
default void logWarn(String msg) {
IO.println(format("WARN", msg));
}
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Code-Wiederverwendung
Logik zwischen Default-Methoden ohne Duplizierung teilen.
Kapselung
Implementierungsdetails bleiben vor implementierenden Klassen verborgen.
DRY-Interfaces
Kein Copy-Paste mehr zwischen Default-Methoden.
Alter Ansatz
Duplizierte Logik
Moderner Ansatz
Private Methoden
Seit JDK
9
Schwierigkeitsgrad
Fortgeschritten
JDK-Unterstützung
Private Interface-Methoden
Verfügbar
Seit JDK 9 allgemein verfügbar (Sept. 2017)
Wie es funktioniert
Java 9 erlaubt private Methoden in Interfaces, sodass Code zwischen Default-Methoden geteilt werden kann, ohne Implementierungsdetails an implementierende Klassen preiszugeben.
Zugehörige Dokumentation