Language Средний

Выносить общую логику в интерфейсах в приватные методы.

✕ 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));
    }
}
Заметили проблему в этом коде? Сообщите нам.
🧩

Повторное использование кода

Совместно использовать логику между методами по умолчанию без дублирования.

🔐

Инкапсуляция

Детали реализации остаются скрытыми от классов-реализаторов.

🧹

DRY-интерфейсы

Больше никакого копирования и вставки между методами по умолчанию.

Старый подход
Дублированная логика
Современный подход
Приватные методы
Начиная с JDK
9
Сложность
Средний
Приватные методы интерфейса
Доступно

Доступно в JDK 9 (сент. 2017)

Java 9 позволяет использовать приватные методы в интерфейсах, что даёт возможность совместно использовать код между методами по умолчанию без раскрытия деталей реализации классам-реализаторам.