Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java 9 Métodos Privados en Interfaces: Mejorar Encapsulamiento y Reutilización de Código

Antes de Java 8, las interfaces pueden tener los siguientes tipos de variables/métodos.

Así que no podemos tener implementación de métodos en interfaces o, más precisamente, una implementación por defecto antes de Java 8. Ver el ejemplo.

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 {
    @Override public void logInfo(String message) { getConnection(); System.out.println("Log Message: " + "INFO"); closeConnection(); }
    @Override public void logWarn(String message) { getConnection(); System.out.println("Log Message: " + "WARN"); closeConnection(); }
    @Override public void logError(String message) { getConnection(); System.out.println("Log Message: " + "ERROR"); closeConnection(); }
    @Override public void logFatal(String message) { getConnection(); System.out.println("Log Message: " + "FATAL"); closeConnection(); }
    @Override public void getConnection() { System.out.println("Abrir conexión a BD"); }
    @Override public void closeConnection() { System.out.println("Cerrar conexión a BD"); }
}

final class LogMySql implements Logging {
    @Override public void logInfo(String message) { getConnection(); System.out.println("Log Message: " + "INFO"); closeConnection(); }
    @Override public void logWarn(String message) { getConnection(); System.out.println("Log Message: " + "WARN"); closeConnection(); }
    @Override public void logError(String message) { getConnection(); System.out.println("Log Message: " + "ERROR"); closeConnection(); }
    @Override public void logFatal(String message) { getConnection(); System.out.println("Log Message: " + "FATAL"); closeConnection(); }
    @Override public void getConnection() { System.out.println("Abrir conexión a BD"); }
    @Override public void closeConnection() { System.out.println("Cerrar conexión a BD"); }
}

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

Salida

Verás la siguiente salida.

Abrir conexión a BD
Log Message: INFO
Cerrar conexión a BD
Abrir conexión a BD
Log Message: WARN
Cerrar conexión a BD
Abrir conexión a BD
Log Message: ERROR
Cerrar conexión a BD
Abrir conexión a BD
Log Message: FATAL
Cerrar conexión a BD

En el ejemplo anterior, cada método log tiene su propia implementación. Con Java 8, las interfaces pueden tener los siguientes tipos de variables/métodos.

Tengamos implementación por defecto y métodos estáticos en la propia interfaz usando Java 8.

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";
    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("Abrir conexión a BD"); }
    static void closeConnection() { System.out.println("Cerrar conexión a BD"); }
}

Salida

Verás la siguiente salida.

Abrir conexión a BD
Log Message: INFO
Cerrar conexión a BD
Abrir conexión a BD
Log Message: WARN
Cerrar conexión a BD
Abrir conexión a BD
Log Message: ERROR
Cerrar conexión a BD
Abrir conexión a BD
Log Message: FATAL
Cerrar conexión a BD

En el ejemplo anterior, volvemos a tener repetición. Con Java 9, las interfaces pueden tener los siguientes tipos de variables/métodos.

Tengamos métodos privados y úsalos en 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("Abrir conexión a BD"); }
    private static void closeConnection() { System.out.println("Cerrar conexión a BD"); }
}

Salida

Verás la siguiente salida.

Abrir conexión a BD
Log Message: INFO
Cerrar conexión a BD
Abrir conexión a BD
Log Message: WARN
Cerrar conexión a BD
Abrir conexión a BD
Log Message: ERROR
Cerrar conexión a BD
Abrir conexión a BD
Log Message: FATAL
Cerrar conexión a BD

Java

  1. Métodos en Java: Cómo Definir, Llamar y Usarlos Efectivamente
  2. Modificadores de acceso en Java: Tipos, reglas y ejemplos prácticos
  3. Clases y métodos abstractos en Java: Guía completa
  4. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  5. Dominando la Interfaz NavigableSet de Java: Navegación, Ordenación y Ejemplos Prácticos
  6. Dominando Expresiones Lambda en Java: Desde Básicos hasta Stream API
  7. Java String toLowerCase() y toUpperCase(): Convertir mayúsculas/minúsculas con conciencia de locale
  8. Entendiendo las Interfaces en Java: Definiciones, Usos y Buenas Prácticas
  9. Cómo enviar correos electrónicos en Java: Guía paso a paso
  10. Java 9 Métodos de Fábrica de Colecciones: Simplificar Creación de List, Set y Map Inmutables
  11. Java 8 Métodos Por Defecto Explicados: Mejorar Interfaces y Compatibilidad Hacia Atrás