Acredito que este código não compilaria por conta da sexta linha, pois se chegar ao else, nunca executará o throws para sua exception (unreachable statement).
De acordo com o que entendi olhando seu código, você quer disponibilizar as contas (presumo que venha de um atributo) caso a senha informada por parâmetro seja válida, certo?
Caso não seja, a intenção seria barrar a execução de algum jeito, lançando assim esta exceção, certo?
Bom, eu acho que não é tão interessante utilizar o try-catch dentro desse método, pois você poderia sempre tratá-lo no momento de sua execução para saber que, afinal, foi informada uma senha inválida.
Segue o código de como, na minha opinião, ficaria melhor.
public Map<String, Conta> getContas(int senha) throws SenhaInvalida {
if (this.autentica(senha))
return contas;
else
throw new SenhaInvalida(senha);
}
Você pode escolher qual seria a melhor opção, como algumas:
- sempre utilizar o tratamento na hora de sua invocação (mas lembre-se que exceptions de NullPointerException são unchecked);
- criar um método que seria responsável por apenas invocar o apresentado acima, deixando-o privado e fazendo apenas com que este novo seja utilizado
(acrescentando nesta ideia, você poderia criar até mesmo algo semelhante um interceptador, que teria a parte de validação da senha abstraída e, de certa forma, centralizada);
- mudar a implementação da sua SenhaInvalida, fazendo com que ela seja checked, assim, ela sempre deverá ser implementada com um try-catch
O que você acha?