Ich habe eine Schnittstelle und zwei Klassen, die die Schnittstelle implementieren.
%Vor% Die Klasse MyClass1
sagt mir Add unimplemented methods
, weil die secondMethod
nicht implementiert ist, OK, ich werde das tun. Aber das Problem ist, dass ich diese Methode in MyClass1
nicht benötige.
Was ist Ihrer Meinung nach das Beste?
return 0
hinzu
Sie sollten einen der folgenden Schritte ausführen:
Zerlegen Sie die Benutzeroberfläche in kleinere Teile und komponieren Sie sie nach Bedarf. Dies ist der bevorzugte Ansatz, besonders wenn Sie MyInterface
kontrollieren.
Geben Sie den sinnvollsten Standardwert zurück, den Sie verwenden können.
Wirf ein UnsupportedOperationException
.
Hier ist ein illustrativeres Beispiel. Nehmen wir an, Ihre Benutzeroberfläche sieht folgendermaßen aus:
%Vor% Wenn Ihr MyClass1
tatsächlich ein Boat
ist und keine Fahrzeugidentifikationsnummer hat, ist es für Sie nicht sinnvoll, dies zu implementieren. In der Tat ist es eigentlich falsch. Andere Kunden erwarten, dass Sie diesen Wert haben, aber Sie können es ihnen nicht geben.
Es wäre besser, die Schnittstellen in kleinere Teile zu zerlegen und zu komponieren, wobei Sie je nach Bedarf das richtige Stück verwenden. Zum Beispiel könnten Sie stattdessen Folgendes schreiben:
%Vor%Dies ist der beste Ansatz, da die Verantwortlichkeiten genau nach Bedarf über die Schnittstellen verteilt werden.
Wenn es wirklich war in Ihrer Domain wichtig zu sein, dass alle Driveables eine Fahrzeugidentifikationsnummer haben, und dies ist nur ein Spezialfall, wo die Fahrzeugidentifikationsnummer unbekannt oder nicht verfügbar ist, dann können Sie angeben eine Standardimplementierung:
%Vor%Wenn es in Ihrer Domain falsch wäre, eine Fahrzeugidentifikationsnummer zurückzugeben, sollten Sie eine Ausnahme auslösen:
%Vor%Wenn Sie es immer noch in der Schnittstelle benötigen und es nie aufgerufen werden sollte (in dieser Implementierung), würde ich implementieren, dass es ein Nicht unterstützteOperationException :
%Vor%Das hängt von der Anforderung ab. 1. Interface pattern ist nützlich, wenn jede andere Klasse, die die Schnittstelle implementiert, fast das gleiche Verhalten hat, was erklärt, warum die Methodenimplementierung obligatorisch ist.
Grundsätzlich müssen Sie den Anruf annehmen, was Ihren Zweck in größerem Maße löst.
für Ex: Wenn 9 von 10 Methoden, die Sie implementieren, dann wahrscheinlich bessere Idee ist, nur mit Return 0 zu implementieren.
Normalerweise erstellen Sie in diesen Fällen eine Basisklasse, die leere Implementierungen aller Schnittstellenmethoden bereitstellt und von ihr ausgeht. Schauen Sie sich zum Beispiel MouseAdapter
Sie machen eine Klasse, die jedem Anrufer verspricht, dass er all die Dinge tun wird, die MyInterface bietet.
Etwas stimmt grundsätzlich nicht mit dem Design, wenn Sie diese Verpflichtung nicht einhalten können.
Versetzen Sie sich in die Position des Anrufers: Was werden sie mit der Antwort von secondMethod () tun? Höchstwahrscheinlich gibt es einen sinnvollen Wert wie 0 oder 1, den Sie zurückgeben können.
Wichtig ist, dass Sie Ihren Anrufer nicht überraschen, also lehne ich das Auslösen einer NotImplementedException ab.
Tags und Links java class methods interface implementation