Tengo un WifiComponenten mi Cameraaplicació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 WifiComponentse 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 WifiComponentestá habilitada. Luego construyo la subclase apropiada de WifiComponent, ya sea WifiComponentImplo NullWifiComponent.
Implementar los métodos supportedWifiTypes()y wifiScan()es fácil. El NullWifiComponentno 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 WifiEncryptionTypeprovisto en el WifiNetwork! La implementación real arroja un IllegalArgumentExceptionsi pasa una WifiEncryptionTypered wifi no compatible .
¿Yo ...
- Lanzar IllegalArgumentException, porque no apoyo loWifiEncryptionTypesolicitado?
- 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

WifiEncriptionTypepor 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
WifiComponentinterfaz 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 mismaWifiComponentinterfaz para saber cuálesWifiEncryptionTypeson compatibles.Si la lista de
WifiEncryptionTypes 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
WifiComponentinterfaz 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