Private interface-Methoden, Beispiel-use-case?
"Unterstützung für die private-Methoden in interfaces wurde kurz in Betracht für die Integration in Java-SE-8 als Teil der Bemühungen um Unterstützung für Lambda-Ausdrücke, aber zurückgezogen wurde, um ermöglichen eine bessere Ausrichtung auf Aufgaben mit höherer Priorität für Java SE 8. Es wird nun vorgeschlagen, dass die Unterstützung für private interface-Methoden durchgeführt werden, so dass nicht abstrakte Methoden einer Schnittstelle zum teilen von code zwischen Ihnen."
So sagt es die Spezifikation für http://openjdk.java.net/jeps/213 und sagt im bug-report https://bugs.openjdk.java.net/browse/JDK-8071453 .
Kann ich aber nicht wirklich glaube, jeder Anwendungsfall, wo das nötig ist, auch mit der kurzen Erklärung oben gegeben. Darf ich Fragen, für ein Beispiel, wo "private interface-Methoden" sind nützlich im Hinblick auf die code?
EDIT: die Antwort ist Also, dass durch, wie die Standard-Implementierungen Hinzugefügt wurden Schnittstellen in Java 8 kann es vorkommen, dass die Standard-Implementierungen mit der gleichen Codebasis.
Beispielsweise
public interface MyInterface {
default void initializeMyClass(MyClass myClass, Params params) {
//do magical things in 100 lines of code to initialize myClass for example
}
default MyClass createMyClass(Params params) {
MyClass myClass = new MyClass();
initializeMyClass(myClass, params);
return myClass;
}
default MyClass createMyClass() {
MyClass myClass = new MyClass();
initializeMyClass(myClass, null);
return myClass;
}
}
Dummes Beispiel, ich weiß. Aber lassen Sie uns sagen, dass wir verwenden wollen initializeMyClass(MyClass, Params)
bei beiden Methoden. Allerdings, wenn wir es so machen (Standard-Methode), dann initializeMyClass(MyClass, Params)
wird ein Teil der öffentlichen Schnittstelle! Um zu verhindern, dass aus geschieht, können wir nur halten den code des gesamten initializeMyClass(MyClass, Params)
innerhalb der createMyClass()
Standard-Methoden. Die Ergebnisse in code-Duplizierung, was unerwünscht ist.
Daher, diese Ursachen problem mit refactoring, und entfernen Sie diese code-Duplikation, private Standard-Methoden sind erlaubt.
Vielen Dank für die Beantwortung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schnittstellen können nun default-Methoden. Diese wurden Hinzugefügt, so dass neue Methoden Hinzugefügt werden könnten, um Schnittstellen ohne zu brechen alle Klassen implementieren die geänderten Schnittstellen.
Wenn zwei Standard-Methoden benötigt, um code gemeinsam zu nutzen, eine private Schnittstelle Methode, die Ihnen erlauben würde, dies zu tun, aber auszusetzen, ohne dass die private Methode und alle seine "implementation details" über die Schnittstelle.
private
ich denke, es kann nicht überschrieben werden, in einer Weise, die nur die Schnittstelle ist das eine, es zu sehen, aber es kann verwendet werden, für die Umsetzung in Standard-Methoden, ohne "verschmutzen" die Schnittstelle mit internen Logik. Macht Sinn, danke!Warum nicht einfach (einfach = mit Java8):
PS: wegen der privaten Helfer nicht möglich in Java
Helper
Klasse!Helper
Klasse durch Eingabe vonMyInterface.Helper
. Private Methoden in interfaces sind vollständig versteckt und nicht erreichbar von außerhalb der Schnittstelle.Java 9 ermöglicht das deklarieren einer privaten Methode in der Schnittstelle.
Hier ist das Beispiel es.
Für die haben, müssen Sie update jdk bis version 1.9.