Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java 9 : Méthodes privées dans les interfaces — Encapsulation et réutilisation

Évolution des interfaces :

Problème : duplication dans les méthodes default

Avec Java 8, le code commun dans les méthodes default ne peut pas être factorisé sans l'exposer.

Solution Java 9 : méthodes privées

Les méthodes private (instance ou static) dans les interfaces permettent de factoriser le code interne sans l'exposer.

Exemple complet : logging factorisé

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

    // Méthode privée d'instance : factorise le logging
    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"); }

    // Méthodes privées static : factorisent connexion
    private static void getConnection() {
        System.out.println("Open Database connection");
    }
    private static void closeConnection() {
        System.out.println("Close Database connection");
    }
}

Sortie

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
... (répété pour LogMySql)

Résolution d'ambiguïté (multiple defaults)

Si une classe implémente deux interfaces avec la même méthode default :

  1. Redéfinir la méthode dans la classe.
  2. Ou appeler explicitement : InterfaceA.super.method().

Méthodes static dans les interfaces (Java 8+)

Méthodes utilitaires accessibles via InterfaceName.staticMethod().

Les méthodes privées (Java 9) complètent ce modèle en permettant un vrai encapsulation au niveau interface.

Java

  1. Classes et méthodes abstraites en Java : guide complet
  2. Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
  3. Maîtriser l'interface NavigableSet de Java : Navigation, tri et exemples pratiques
  4. Maîtriser les expressions lambda Java : Des bases à l'API Stream
  5. Java String toLowerCase() & toUpperCase() : Convertir la casse du texte avec prise en compte des locales
  6. Comprendre les interfaces Java : Définitions, Usages et Bonnes pratiques
  7. Comment envoyer des e-mails en Java : Guide étape par étape
  8. Java 9 : Méthodes factory de collections — List, Set, Map immuables simplifiés
  9. Java 8 : Méthodes par défaut (default) dans les interfaces — Compatibilité ascendante