Java 9 Private Interface Methods: инкапсуляция и повторное использование кода
До Java 8 интерфейсы могли содержать только константы и абстрактные методы. Java 8 добавила default и static методы. Java 9 добавила private и private static методы в интерфейсах для устранения дублирования кода в default-методах.
Эволюция: до Java 8
Каждый класс-реализатор дублировал логику логирования (подключение к БД, закрытие).
Java 8: default и static методы в интерфейсе
Логика вынесена в интерфейс, но повторяется в каждом default-методе (getConnection(), closeConnection() вызываются в каждом).
Java 9: private методы в интерфейсе
Теперь можно вынести общую логику в private метод интерфейса:
interface Logging {
String ORACLE = "Oracle_Database";
String MYSQL = "MySql_Database";
private void log(String message, String prefix) {
getConnection();
System.out.println("Log Message : " + prefix);
closeConnection();
}
default void logInfo(String message) { log(message, "INFO"); }
default void logWarn(String message) { log(message, "WARN"); }
default void logError(String message) { log(message, "ERROR"); }
default void logFatal(String message) { log(message, "FATAL"); }
private static void getConnection() { System.out.println("Open Database connection"); }
private static void closeConnection() { System.out.println("Close Database connection"); }
}
Классы-реализаторы (LogOracle, LogMySql) становятся пустыми. Вызов методов даёт тот же результат, но без дублирования.
Резюме типов методов в интерфейсах
| Версия | Допустимые члены |
|---|---|
| До Java 8 | Константы, абстрактные методы |
| Java 8 | + default методы, static методы |
| Java 9 | + private методы, private static методы |
Private методы в интерфейсах позволяют следовать DRY (Don't Repeat Yourself) и инкапсулировать вспомогательную логику.
java
- Методы в Java: как определять, вызывать и эффективно использовать
- Абстрактные классы и методы в Java: полное руководство
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Освоение интерфейса NavigableSet в Java: навигация, сортировка и практические примеры
- Освоение Java Lambda-выражений: от основ к Stream API
- Java String toLowerCase() и toUpperCase(): преобразование регистра с учётом локали
- Интерфейсы в Java: определение, использование и лучшие практики
- Отправка email в Java: пошаговое руководство
- Java 9 Collection Factory Methods: удобное создание неизменяемых List, Set, Map
- Java 8 Default Methods: улучшение интерфейсов и обратная совместимость