Tengo un WifiComponent
en mi Camera
aplicación en mi cliente. Es responsable de manejar la funcionalidad relacionada con Wifi de la cámara. La cámara representa una cámara del mundo real.
Esto WifiComponent
se puede habilitar (en cuyo caso puedo hacer cosas con él, como verificar el estado de la conexión y escanear) o deshabilitar (en cuyo caso no puede hacer nada con él, aparte de preguntar si está habilitado).
Al crear una aplicaciónCamera
en mi cliente , le pregunto a la cámara si WifiComponent
está habilitada. Luego construyo la subclase apropiada de WifiComponent
, ya sea WifiComponentImpl
o NullWifiComponent
.
Implementar los métodos supportedWifiTypes()
y wifiScan()
es fácil. El NullWifiComponent
no admite ningún tipo, se realiza instantáneamente con el escaneo y no encuentra resultados.
Pero ahora tengo que implementar un bool connect(WifiNetwork network, String password)
método. Quiero decir que no pude conectarme ... ¡Pero ni siquiera soporto lo WifiEncryptionType
provisto en el WifiNetwork
! La implementación real arroja un IllegalArgumentException
si pasa una WifiEncryptionType
red wifi no compatible .
¿Yo ...
- Lanzar
IllegalArgumentException
, porque no apoyo loWifiEncryptionType
solicitado? - Silenciosamente no se conecta (
return false
), sin importar lo que se proporcione?
Pregunta generalizada:
Si la implementación real cumple con un contrato, y parte de este contrato es lanzar excepciones para ciertas entradas, ¿una implementación nula debe priorizar su neutralidad o el contrato?
fuente
WifiEncriptionType
por lo que no debe arrojarlaIllegalArgumentException
. Por lo tanto, no creo que arrojarlo sea un incumplimiento de contrato.Respuestas:
Como se supone que la implementación nula es un reemplazo directo para la implementación funcional completa, la implementación nula debe adherirse completamente a la interfaz que implementa.
Si la
WifiComponent
interfaz especifica queconnect()
arroja una excepción si se invoca con una no admitidaWifiEncryptionType
, entonces eso es exactamente lo que debe hacer su implementación nula, especialmente si la aplicación debe usar la mismaWifiComponent
interfaz para saber cuálesWifiEncryptionType
son compatibles.Si la lista de
WifiEncryptionType
s admitidos no proviene de su implementación nula, entonces su implementación nula solo debería lanzar una excepción si también se requiere una implementación funcional para lanzarla.Si la
WifiComponent
interfaz no especifica que se debe lanzar una excepción, entonces es mejor asumir que el valor sería aceptable para una implementación funcional e informar una falla de conexión genérica (return false
).fuente