Eu tenho um WifiComponent
no meu Camera
aplicativo no meu cliente. É responsável por lidar com a funcionalidade relacionada à Wifi da câmera. A câmera representa uma câmera do mundo real.
Isso WifiComponent
pode ser ativado (nesse caso, eu posso fazer coisas com ele, como verificar o status e a verificação da conexão) ou desativado (nesse caso, você não pode fazer nada com isso, além de perguntar se está ativado).
Ao criar um Camera
no meu aplicativo cliente , pergunto à câmera se ela WifiComponent
está ativada. Então eu construo a subclasse apropriada de WifiComponent
, ou WifiComponentImpl
ou NullWifiComponent
.
A implementação dos métodos supportedWifiTypes()
e wifiScan()
é fácil. O NullWifiComponent
não suporta nenhum tipo, é feito instantaneamente com a verificação e não encontra resultados.
Mas agora eu tenho que implementar um bool connect(WifiNetwork network, String password)
método. Quero dizer que não consegui conectar ... Mas eu nem apoio o WifiEncryptionType
fornecido no WifiNetwork
! A implementação real lança um IllegalArgumentException
se você passar uma WifiEncryptionType
rede wifi não suportada .
Eu ...
- Jogue
IllegalArgumentException
, porque eu não apoio oWifiEncryptionType
solicitado? - Falha silenciosamente ao conectar (
return false
), não importa o que for fornecido?
Pergunta generalizada:
Se a implementação real cumprir um contrato, e parte deste contrato for lançar exceções para determinadas entradas, uma implementação nula deve priorizar sua neutralidade ou o contrato?
fonte
WifiEncriptionType
lançaIllegalArgumentException
. Portanto, acho que não jogá-lo seria uma quebra de contrato.Respostas:
Como a implementação nula deve substituir a implementação totalmente funcional, a implementação nula deve aderir totalmente à interface implementada.
Se a
WifiComponent
interface especificar queconnect()
lança uma exceção se for invocada com uma incompatívelWifiEncryptionType
, é exatamente isso que sua implementação nula deve fazer, especialmente se o aplicativo precisar usar a mesmaWifiComponent
interface para saber quaisWifiEncryptionType
são suportados.Se a lista de
WifiEncryptionType
s suportados não vier de sua implementação nula, sua implementação nula somente lançará uma exceção se uma implementação funcional também for necessária para lançá-la.Se a
WifiComponent
interface não especificar que uma exceção deve ser lançada, é melhor assumir que o valor seria aceitável para uma implementação funcional e relatar uma falha de conexão genérica (return false
).fonte