Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java 9 Private Interface Methods: Encapsulatie & herbruik verbeteren

Voor Java 8 konden interfaces alleen:

  • Constanten
  • Abstracte methodes

Geen methode-implementaties (default implementaties) waren mogelijk. Zie het voorbeeld:

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";
    void logInfo(String message);
    void logWarn(String message);
    void logError(String message);
    void logFatal(String message);
    void getConnection();
    void closeConnection();
}

Elke log-methode heeft een eigen implementatie met herhaling.

Met Java 8 kunnen interfaces ook default methodes en statische methodes hebben. Laten we default-implementatie en statische methodes in de interface plaatsen:

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

Nu is er nog steeds herhaling in de default-methodes.

Met Java 9 mogen interfaces ook private methodes en private static methodes hebben. We kunnen nu private helper-methodes gebruiken:

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

De implementerende klassen LogOracle en LogMySql zijn nu leeg. Uitvoer blijft hetzelfde.

Java

  1. Java-methodes: definiëren, aanroepen en effectief gebruiken
  2. Java-toegangsmodificaties begrijpen: typen, regels en praktische voorbeelden
  3. Java abstracte klassen en methoden: een uitgebreide gids
  4. Java interfaces meesteren: concepten, implementatie en best practices
  5. Java NavigableSet interface: Navigatie, sortering en praktische voorbeelden
  6. Java Lambda-expressies: Van basis tot Stream API
  7. Java String toLowerCase() & toUpperCase(): Tekstcase Converteren met Locale Awareness
  8. Java Interfaces begrijpen: Definities, Gebruik en Best Practices
  9. E-mails versturen in Java: Een stapsgewijze handleiding
  10. Java 9 Collection Factory Methods: Onveranderlijke List, Set & Map eenvoudig aanmaken
  11. Java 8 Default Methods: Interfaces verbeteren & backward compatibility