Saluto a tutti i guru Java!Registrazione dai metodi di interfaccia predefiniti
Poiché Java8 possiamo avere implementazioni predefinite nelle interfacce (yay!). Tuttavia, il problema sorge quando si desidera effettuare il log dal metodo predefinito.
Ho la sensazione che non sia saggio chiamare .getLogger() ogni volta che voglio registrare qualcosa in un metodo predefinito.
Sì, è possibile definire una variabile statica in un'interfaccia, ma non è comunque una buona pratica per le interfacce + espone il registratore (deve essere pubblico).
soluzione che ho in questo momento:
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 è ancora visibile a tutti che in realtà non ha alcun senso in quanto non prevede alcun metodo e dovrebbe essere interno all'interfaccia.
Qualcuno di voi sa di una soluzione migliore? :)
EDIT: Io uso SLF4J sostenuta da Logback
"Ho la sensazione che non è saggio chiamare .getLogger() ogni volta che voglio per accedere qualcosa in un metodo di default ". Hai eseguito misurazioni delle prestazioni per sostenere questa sensazione? In caso contrario, non ottimizzare le prestazioni se non è necessario. – Ray
L'esposizione di una classe pubblica 'LogHolder' o di un' Logger LOGGER' pubblico non fa molta differenza secondo me. – assylias
Non vedo alcun motivo per _yay! _ –