In der Sammlungsschnittstelle habe ich eine Methode mit dem Namen gefunden removeIf()
, die ihre Implementierung enthält.
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
Ich möchte wissen, ob es eine Möglichkeit gibt, den Methodenkörper in einer Schnittstelle zu definieren.
Was ist das default
Schlüsselwort und wie funktioniert es?
Antworten:
Von https://dzone.com/articles/interface-default-methods-java
Es gibt eine häufig gestellte Frage zu Standardmethoden, wenn sie zum ersten Mal von der neuen Funktion erfahren:
Beispiel zur Veranschaulichung dieser Situation:
Dieser Code kann nicht mit folgendem Ergebnis kompiliert werden:
Um dies zu beheben, müssen wir es in Clazz manuell beheben, indem wir die widersprüchliche Methode überschreiben:
Was aber, wenn wir die Standardimplementierung der Methode foo () von Schnittstelle A aus aufrufen möchten, anstatt unsere eigene zu implementieren?
Es ist möglich, auf A # foo () wie folgt zu verweisen:
quelle
Diese Methoden werden als Standardmethoden bezeichnet. Die Standardmethode oder Defender-Methode ist eine der neu hinzugefügten Funktionen in Java 8.
Sie werden verwendet, damit eine Schnittstellenmethode eine Implementierung bereitstellen kann, die standardmäßig verwendet wird, falls eine konkrete Klasse keine Implementierung für diese Methode bereitstellt.
Wenn Sie also eine Schnittstelle mit einer Standardmethode haben:
Die folgende Klasse ist vollkommen gültig:
Wenn Sie eine Instanz erstellen von
HelloImpl
:Nützliche Links:
quelle
Ich habe ein bisschen recherchiert und Folgendes gefunden. Hoffe das hilft.
Normale Schnittstellenmethoden werden als abstrakt deklariert und müssen in der Klasse definiert werden, die die Schnittstelle implementiert. Dies "belastet" den Klassenimplementierer mit der Verantwortung, jede deklarierte Methode zu implementieren. Noch wichtiger ist, dass eine Erweiterung einer Schnittstelle nach der Veröffentlichung nicht möglich ist. Andernfalls müssten alle Implementierer ihre Implementierung anpassen, wodurch die Abwärtsquellen- und Binärkompatibilität unterbrochen wird.
Um diese Probleme zu lösen, ist eine der neuen Funktionen von JDK 8 die Möglichkeit, vorhandene Schnittstellen mit Standardmethoden zu erweitern. Standardmethoden werden nicht nur deklariert, sondern auch in der Schnittstelle definiert.
quelle