Java 9 Private Interface-Methoden
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
Neue Funktionen in Java 9
Andere Erweiterungen