1
resposta

Qual o local mais apropriado para lançar as exceções?

Após as alterações realizadas na aula, ao efetuar um teste de transferência com valor negativo, aconteceu um depósito inesperado 0.2 na conta de destino (no meu caso), esse valor é referente a taxa de saque, já que o método transfere, faz uso tanto do método saca quanto deposita.

Graças as aulas de exceção eu consigo corrigir, mas a minha dúvida é onde: posso lançar exceção (SaldoInsuficienteException) na classe Conta e na (ValorInvalidoException) classe ContaCorrente? É correto fazer isso?

Métodos alterados: Classe Conta:

public void saca(double valor) throws SaldoInsuficienteException{
        if(valor > this.saldo) {
            throw new SaldoInsuficienteException("Saldo insuficiente. Seu saldo atual é " + this.saldo);
        }
        this.saldo -= valor;
    }
    public void transfere(double valor, Conta destino) throws SaldoInsuficienteException{
        this.saca(valor);
        destino.deposita(valor);
    }

Classe ContaCorrente

public void saca(double valor) throws SaldoInsuficienteException {
        if(valor <= 0 ) {
            throw new ValorSolicitadoInvalidoException("O valor deverá ser maior que ZERO.");
        }
             super.saca(valor + 0.2);
    }

Eu tentei fazer na classe Conta algo do tipo: "public void saca(double valor) throws SaldoInsuficienteException | ValorInvalidoException"{} Mas não deu certo (haha...)

1 resposta

Olá Paulinha, tudo bem?

É possível lançar exceções em diferentes locais do seu código, dependendo da sua necessidade. No seu caso, lançar a exceção SaldoInsuficienteException na classe Conta e ValorSolicitadoInvalidoException na classe ContaCorrente é uma boa prática, pois cada classe é responsável por suas próprias regras de negócio.

Quando você tentou lançar as duas exceções na mesma assinatura do método saca na classe Conta, ocorreu um erro porque a assinatura do método já estava definida na classe pai. Para resolver isso, você pode criar um novo método na classe Conta para tratar a exceção ValorInvalidoException.

Por exemplo:

public void saca(double valor) throws SaldoInsuficienteException {
    if(valor <= 0 ) {
        throw new ValorInvalidoException("O valor deverá ser maior que ZERO.");
    }
    if(valor > this.saldo) {
        throw new SaldoInsuficienteException("Saldo insuficiente. Seu saldo atual é " + this.saldo);
    }
    this.saldo -= valor;
}

public void sacaComValidacao(double valor) throws SaldoInsuficienteException, ValorInvalidoException {
    if(valor <= 0 ) {
        throw new ValorInvalidoException("O valor deverá ser maior que ZERO.");
    }
    this.saca(valor);
}

Dessa forma, você pode chamar o método sacaComValidacao na sua classe ContaCorrente para tratar as duas exceções.

Espero ter ajudado e bons estudos!