Java 9 Private Interface-Methoden

Java 9 新特性Neue Funktionen in Java 9

Vor Java 8 konnten Schnittstellen konstante Variablen und abstrakte Methoden haben.

Wir konnten keine Methodenimplementierungen in Schnittstellen bereitstellen. Wenn wir eine Kombination aus abstrakten Methoden und nicht abstrakten Methoden (Methoden mit Implementierungen) bereitstellen wollten, mussten wir eine abstrakte Klasse verwenden.

Beispiel

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-Meldung : " + "INFO"); closeConnection(); } @Override public void logWarn(String message) { getConnection(); System.out.println("Log-Meldung : " + "WARN"); closeConnection(); } @Override public void logError(String message) { getConnection(); System.out.println("Log-Meldung: " + "ERROR"); closeConnection(); } @Override public void logFatal(String message) { getConnection(); System.out.println("Log-Meldung: " + "FATAL"); closeConnection(); } @Override public void getConnection() { System.out.println("Datenbankverbindung öffnen"); } @Override public void closeConnection() { System.out.println("Datenbankverbindung schließen"); } } final class LogMySql implements Logging { @Override public void logInfo(String message) { getConnection(); System.out.println("Protokollmeldung : " + "INFO"); closeConnection(); } @Override public void logWarn(String message) { getConnection(); System.out.println("Protokollmeldung : " + "WARN"); closeConnection(); } @Override public void logError(String message) { getConnection(); System.out.println("Log-Meldung : " + "ERROR"); closeConnection(); } @Override public void logFatal(String message) { getConnection(); System.out.println("Protokollmeldung : " + "FATAL"); closeConnection(); } @Override public void getConnection() { System.out.println("Datenbankverbindung öffnen"); } @Override public void closeConnection() { System.out.println("Datenbankverbindung schließen"); } } 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(); }

Die Ausgabe des obigen Beispiels ist:

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

Im obigen Beispiel hat jede Log-Methode ihre eigene Implementierung.

In Java 8 führten Interfaces einige neue Funktionen ein – Default-Methoden und statische Methoden. In Java SE 8 können wir Methodenimplementierungen in Interfaces schreiben, einfach indem wir dasdefaultSchlüsselwort verwenden, um sie zu definieren.

In Java 8 kann ein Interface die folgenden Arten von Variablen/Methoden definieren:

  • Konstanten
  • Abstrakte Methoden
  • Default-Methoden
  • Statische Methoden

Beispiel

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("Protokollmeldung : " + "INFO"); closeConnection(); } default void logWarn(String message) { getConnection(); System.out.println("Log-Meldung : " + "WARN"); closeConnection(); } default void logError(String message) { getConnection(); System.out.println("Log-Meldung: " + "ERROR"); closeConnection(); } default void logFatal(String message) { getConnection(); System.out.println("Protokollmeldung : " + "FATAL"); closeConnection(); } static void getConnection() { System.out.println("Datenbankverbindung öffnen"); } static void closeConnection() { System.out.println("Datenbankverbindung schließen"); } }

Die Ausgabe des obigen Beispiels ist:

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

Java 9 unterstützt nicht nur Default-Methoden in Schnittstellen wie Java 8, sondern auch private Methoden.

In Java 9 kann eine Schnittstelle die folgenden Arten von Variablen/Methoden definieren:

  • Konstanten
  • Abstrakte Methoden
  • Default-Methoden
  • Statische Methoden
  • Private Methoden
  • Private statische Methoden

Das folgende Beispiel extrahiert den redundanten Code in eine gemeinsame Methode, was deutlich sauberer aussieht:

Beispiel

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-Meldung : " + 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("Datenbankverbindung öffnen"); } private static void closeConnection() { System.out.println("Datenbankverbindung schließen"); } }

Die Ausgabe des obigen Beispiels ist:

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

Java 9 新特性Neue Funktionen in Java 9

Andere Erweiterungen