Ich habe ein WifiComponent
in meinem Camera
in meiner Client - Anwendung. Es ist für die Verwaltung der Wifi-bezogenen Funktionen der Kamera verantwortlich. Die Kamera repräsentiert eine reale Kamera.
Dies WifiComponent
kann entweder aktiviert werden (in diesem Fall kann ich Dinge damit tun, z. B. den Verbindungsstatus überprüfen und scannen) oder deaktiviert werden (in diesem Fall können Sie überhaupt nichts damit tun, außer zu fragen, ob es aktiviert ist).
Beim Erstellen einer Camera
in meinem Client verwendeten Anwendung frage ich die Kamera, ob sie WifiComponent
aktiviert ist. Dann konstruiere ich die entsprechende Unterklasse von WifiComponent
entweder WifiComponentImpl
oder NullWifiComponent
.
Die Implementierung der supportedWifiTypes()
und wifiScan()
-Methoden ist einfach. Das NullWifiComponent
unterstützt keine Typen, ist sofort mit dem Scannen fertig und findet keine Ergebnisse.
Aber jetzt muss ich eine bool connect(WifiNetwork network, String password)
Methode implementieren . Ich möchte sagen, dass ich keine Verbindung hergestellt habe ... Aber ich unterstütze nicht einmal die WifiEncryptionType
im WifiNetwork
! Die eigentliche Implementierung löst IllegalArgumentException
ein nicht unterstütztes WifiEncryptionType
WLAN-Netzwerk aus, wenn Sie es übergeben .
Muss ich ...
- Werfen
IllegalArgumentException
, weil ich dieWifiEncryptionType
angeforderte nicht unterstütze ? return false
Keine Verbindung herstellen ( ), egal was bereitgestellt wird?
Verallgemeinerte Frage:
Wenn die tatsächliche Implementierung einen Vertrag erfüllt und ein Teil dieses Vertrags darin besteht, Ausnahmen für bestimmte Eingaben auszulösen, sollte eine Nullimplementierung ihre Neutralität oder den Vertrag priorisieren?
quelle
WifiEncriptionType
so dass sie das nicht werfen sollteIllegalArgumentException
. Ich denke also nicht, dass es eine Vertragsverletzung wäre, wenn man es nicht wirft.Antworten:
Da die Null-Implementierung ein Ersatz für die voll funktionsfähige Implementierung sein soll, sollte die Null-Implementierung vollständig an der von ihr implementierten Schnittstelle haften.
Wenn die
WifiComponent
Schnittstelle angibt, dassconnect()
eine Ausnahme ausgelöst wirdWifiEncryptionType
, wenn sie mit einer nicht unterstützten aufgerufen wird, sollte Ihre Null-Implementierung genau dies tun, insbesondere wenn die Anwendung dieselbeWifiComponent
Schnittstelle verwenden muss, um zu erfahren, welcheWifiEncryptionType
s unterstützt werden.Wenn die Liste der unterstützten
WifiEncryptionType
s nicht aus Ihrer Null-Implementierung stammt, sollte Ihre Null-Implementierung nur dann eine Ausnahme auslösen, wenn auch eine funktionale Implementierung erforderlich ist, um sie auszulösen.Wenn die
WifiComponent
Schnittstelle nicht angibt, dass eine Ausnahme ausgelöst werden muss, ist es besser anzunehmen, dass der Wert für eine funktionale Implementierung akzeptabel ist, und einen generischen Verbindungsfehler zu melden (return false
).quelle