Es gibt eine bestimmte Bibliothek, die ich in meinem Projekt verwende. Diese Bibliothek hat eine Schnittstelle, die ungefähr 15 Methoden hat.Ist es in Ordnung, den Methoden einer Schnittstelle, die einen Listener darstellt, Standardimplementierungen hinzuzufügen?
Der Zweck dieser Schnittstelle ist es, einige Ereignisse, die in der Bibliothek generiert werden, zu abonnieren. Eine Listener-Klasse in einer Anwendung kann diese Schnittstelle implementieren und sich selbst als Listener in der Bibliothek registrieren, um Ereignisse zu empfangen.
Alle Methoden in dieser Schnittstelle sind tatsächlich Ereignisse. Es kann Listener geben, die nur ein oder zwei Ereignisse von vielen Ereignissen in der Schnittstelle empfangen müssen. Obwohl ein Listener nur an wenigen Ereignissen interessiert ist, muss der Listener beim Erweitern der Schnittstelle alle Methoden implementieren.
Also bat ich den Entwickler dieser Bibliothek, den Methoden in der Schnittstelle leere Standardimplementierungen hinzuzufügen.
Aber der Bibliotheksentwickler weigert sich, Standardimplementierungen hinzuzufügen, die besagen, dass dies gegen Java-Best Practices verstößt und die Verwendung von Standardimplementierungen in Schnittstellenmethoden gegen den Zweck von Schnittstellen verstößt.
Aber, wie ich verstehen kann, gibt eine Methode in dieser Schnittstelle keine Aktion an, die ein Implementierer dieser Schnittstelle in der Lage sein sollte. Eine Methode in dieser Schnittstelle definiert eher ein Ereignis, an dem ein Implementierer interessiert sein könnte. Daher kann ich keinen klaren Grund sehen, keine Standardimplementierungen hinzuzufügen.
Also, das Hinzufügen von Standardimplementierungen zu dieser Schnittstelle brechen die Java-Best Practices?
Sie wollen eine Schnittstelle mit der Implementierung? Das würde nicht einmal kompilieren. Es sei denn, ich verstehe deine Frage nicht. – Manu
In Java 8 können Sie eine Standardimplementierung für Schnittstellenmethoden angeben, wodurch es für einen Implementierer der Schnittstelle optional ist, die Methode zu implementieren. –
Wusste das nicht. Es scheint mir, dass diese Funktion für Abwärtskompatibilität vorgesehen ist, während Sie nur eine abstrakte Klasse anstelle einer Schnittstelle verwenden sollten. (Sie brauchen nicht einmal den Bibliotheks-Typen, machen Sie es einfach selbst) – Manu