Métodos privados em interfaces
Extraia lógica compartilhada em interfaces usando métodos privados.
Comparação de Código
✕ 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));
}
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Reuso de código
Compartilhe lógica entre métodos default sem duplicação.
Encapsulamento
Detalhes de implementação ficam ocultos das classes que implementam a interface.
Interfaces DRY
Chega de copiar e colar entre métodos default.
Abordagem Antiga
Lógica duplicada
Abordagem Moderna
Métodos privados
Desde o JDK
9
Dificuldade
Intermediário
Suporte JDK
Métodos privados em interfaces
Disponível
Amplamente disponível desde o JDK 9 (set 2017)
Como funciona
O Java 9 permite métodos privados em interfaces, possibilitando compartilhar código entre métodos default sem expor detalhes de implementação às classes que implementam a interface.
Documentação Relacionada