Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java 9 Métodos Privados em Interfaces: Aumentando Encapsulamento e Reuso de Código

Antes do Java 8, interfaces podiam ter:

Não era possível ter implementação de métodos em interfaces. Veja o exemplo com duplicação de código:

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    void logInfo(String message);
    void logWarn(String message);
    void logError(String message);
    void logFatal(String message);
    void getConnection();
    void closeConnection();
}

// Duas implementações repetindo getConnection/closeConnection em cada método de log...

Com Java 8, interfaces ganharam métodos default e métodos static, permitindo implementação padrão na interface:

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    default void logInfo(String message) { getConnection(); System.out.println("Log Message: INFO"); closeConnection(); }
    default void logWarn(String message) { getConnection(); System.out.println("Log Message: WARN"); closeConnection(); }
    default void logError(String message) { getConnection(); System.out.println("Log Message: ERROR"); closeConnection(); }
    default void logFatal(String message) { getConnection(); System.out.println("Log Message: FATAL"); closeConnection(); }
    static void getConnection() { System.out.println("Open Database connection"); }
    static void closeConnection() { System.out.println("Close Database connection"); }
}

Mas ainda há repetição nos métodos default. Com Java 9, interfaces podem ter:

Usando Métodos Privados no Java 9

public class Tester {
    public static void main(String[] args) {
        LogOracle log = new LogOracle();
        log.logInfo(""); log.logWarn(""); log.logError(""); log.logFatal("");
        LogMySql log1 = new LogMySql();
        log1.logInfo(""); log1.logWarn(""); log1.logError(""); log1.logFatal("");
    }
}

final class LogOracle implements Logging { }
final class LogMySql implements Logging { }

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"); }
}

Saída

Open Database connection
Log Message: INFO
Close Database connection
Open Database connection
Log Message: WARN
Close Database connection
Open Database connection
Log Message: ERROR
Close Database connection
Open Database connection
Log Message: FATAL
Close Database connection

Métodos privados em interfaces eliminam duplicação de código entre métodos default/static, melhorando encapsulamento e manutenibilidade.

Java

  1. Métodos em Java: Como Definir, Chamar e Usar Eficazmente
  2. Classes e Métodos Abstratos em Java: Guia Completo
  3. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  4. Dominando a Interface NavigableSet do Java: Navegação, Ordenação e Exemplos Práticos
  5. Dominando Expressões Lambda em Java: Do Básico à Stream API
  6. Java String toLowerCase() & toUpperCase(): Converter Caixa de Texto com Consciência de Locale
  7. Entendendo Interfaces em Java: Definições, Usos e Boas Práticas
  8. Como Enviar E-mails em Java: Guia Passo a Passo
  9. Java 9 Collection Factory Methods: Simplifique Criação de List, Set e Map Imutáveis
  10. Java 8 Default Methods Explicados: Aprimorando Interfaces e Compatibilidade Reversa