Приветствуйте всех гуру Java!
Так как Java8 мы можем иметь реализации по умолчанию в интерфейсах (yay!). Однако проблема возникает, когда вы хотите использовать метод по умолчанию.
У меня такое чувство, что неразумно вызывать .getLogger() каждый раз, когда я хочу что-то записывать по умолчанию.
Да, можно определить статическую переменную в интерфейсе, но это не является хорошей практикой для интерфейсов в любом случае +, он предоставляет журнал (должен быть общедоступным).
Решение, которое у меня есть на данный момент:
interface WithTimeout<Action> {
default void onTimeout(Action timedOutAction) {
LogHolder.LOGGER.info("Action {} time out ignored.", timedOutAction);
}
static final class LogHolder {
private static final Logger LOGGER = getLogger(WithTimeout.class);
}
}
LogHolder по-прежнему отображается всем, что на самом деле не имеет никакого смысла, поскольку оно не предоставляет никаких методов и должно быть внутренним для интерфейса.
Знает ли кто-нибудь о лучшем решении?:)
EDIT: я использую SLF4J, поддерживаемый Logback