Prywatne metody interfejsów
Wyodrębnij współdzieloną logikę w interfejsach używając metod prywatnych.
Porównanie kodu
✕ 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));
}
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Ponowne użycie kodu
Współdziel logikę między metodami domyślnymi bez duplikacji.
Enkapsulacja
Szczegóły implementacji pozostają ukryte przed klasami implementującymi.
Interfejsy DRY
Koniec z kopiuj-wklej między metodami domyślnymi.
Stare podejście
Powielona logika
Nowoczesne podejście
Metody prywatne
Od JDK
9
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Prywatne metody interfejsów
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
Java 9 umożliwia prywatne metody w interfejsach, co pozwala współdzielić kod między metodami domyślnymi bez ujawniania szczegółów implementacji klasom implementującym.
Powiązana dokumentacja
Dowód