Ответ
Да, начиная с Java 9.
private методы в интерфейсах позволяют выносить общую логику из default методов, избегая дублирования кода внутри интерфейса.
Пример:
public interface DataProcessor {
default void processData(String data) {
validate(data);
System.out.println("Processing: " + transform(data));
}
default void logAndProcess(String data) {
validate(data);
System.out.println("Logging...");
System.out.println("Processing: " + transform(data));
}
// Private метод с реализацией для устранения дублирования
private void validate(String data) {
if (data == null || data.isEmpty()) {
throw new IllegalArgumentException("Data cannot be empty");
}
}
// Private статический метод также возможен
private static String transform(String input) {
return input.trim().toUpperCase();
}
}
Ключевые ограничения:
- Могут быть как статическими, так и нестатическими.
- Не могут быть
abstract— всегда должны иметь тело (реализацию). - Видимость строго ограничена интерфейсом: недоступны для классов, реализующих интерфейс, и других интерфейсов.
- Основная цель — рефакторинг и организация кода внутри самого интерфейса.