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!

Schreibe einen Kommentar