Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 9 Private Interface Methods: Bessere Kapselung & Code-Wiederverwendung

Entwicklung der Interfaces

Version Erlaubte Mitglieder
≤ Java 7 Konstanten, abstract Methoden
Java 8 + default Methoden, static Methoden
Java 9 + private Methoden, private static Methoden

Motivation

default Methoden ermöglichen Implementierungen in Interfaces, führen aber oft zu Code-Duplikation, wenn mehrere Default-Methoden gemeinsame Logik teilen. private Methoden lösen dies: Sie sind nur im Interface sichtbar und können von default / static Methoden aufgerufen werden.

Beispiel: Logging-Interface

Vor Java 8 – Code-Duplikation in Implementierungen

interface Logging {
    void logInfo(String msg);
    void logWarn(String msg);
    void logError(String msg);
    void logFatal(String msg);
    void getConnection();
    void closeConnection();
}

class LogOracle implements Logging { ... } // alle Methoden implementiert, viel Duplikation
class LogMySql implements Logging { ... }  // dito

Java 8 – Default & Static Methoden im Interface

interface Logging {
    default void logInfo(String msg) { log(msg, "INFO"); }
    default void logWarn(String msg) { log(msg, "WARN"); }
    default void logError(String msg) { log(msg, "ERROR"); }
    default void logFatal(String msg) { log(msg, "FATAL"); }

    // Problem: log() muss default/static sein → öffentlich sichtbar!
    static void log(String msg, String level) { ... }
    static void getConnection() { ... }
    static void closeConnection() { ... }
}

Java 9 – Private Methoden für echte Kapselung

interface Logging {
    // Private Hilfsmethode – nicht nach außen sichtbar
    private void log(String msg, String level) {
        getConnection();
        System.out.println("Log: " + level + " - " + msg);
        closeConnection();
    }

    default void logInfo(String msg) { log(msg, "INFO"); }
    default void logWarn(String msg) { log(msg, "WARN"); }
    default void logError(String msg) { log(msg, "ERROR"); }
    default void logFatal(String msg) { log(msg, "FATAL"); }

    private static void getConnection() { System.out.println("DB connect"); }
    private static void closeConnection() { System.out.println("DB close"); }
}

class LoggerA implements Logging {}
class LoggerB implements Logging {}

Ausgabe bei Nutzung:

DB connect
Log: INFO - test
DB close
DB connect
Log: WARN - test
DB close
...

Regeln für private Interface-Methoden

Vorteile

Fazit

Private Interface-Methoden schließen eine Lücke in Java 8s Default-Methoden-Design und machen Interfaces zu echten, gekapselten Implementierungsträgern – ohne Implementierungsklassen zu belasten.

Java

  1. Java Methoden: Definieren, Aufrufen und Effektiv Nutzen
  2. Java abstrakte Klassen und Methoden: Ein umfassender Leitfaden
  3. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  4. Java NavigableSet Interface meistern: Navigation, Sortierung und praktische Beispiele
  5. Java Lambda Expressions meistern: Von Grundlagen bis Stream API
  6. Java String toLowerCase() & toUpperCase(): Text-Groß-/Kleinschreibung mit Locale-Bewusstsein konvertieren
  7. Java Interfaces verstehen: Definitionen, Verwendung und Best Practices
  8. E-Mails in Java versenden: Schritt-für-Schritt-Anleitung
  9. Java 9 Collection Factory Methods: Unveränderliche List, Set & Map kompakt erzeugen
  10. Java 8 Default Methods: Interfaces mit Implementierung & Backward Compatibility