Translate

quinta-feira, 31 de janeiro de 2013

Java 7 - Bloco multi-catch

No artigo anterior demonstrei o novo try capaz de encerrar recursos sem requerer do programador linhas de códigos improdutivas para isso.

Em sequência a produtividade no tratamento de exceções, vamos explorar o bloco multi-catch.

Do que se trata?

O Java 7 incorporou também uma forma de capturar mais de um tipo de exceção desde que as exceções capturadas herdem em algum momento de sua genealogia a mesma superclasse.

O exemplo a seguir lança propositalmente uma das exceções como IOException, IOError e InternalError. Estas exceções têm em comum Throwable como superclasse, por isso podem ser unidas em um único bloco capaz de capturar estas exceções.

Exemplo 1 - Testando o bloco multi-catch

import java.io.IOError;
import java.io.IOException;

public class TestaMultiCatch {

    public static final int MINIMUM = 1;
    public static final int MAXIMUM = 15;
   
    public static void main(String[] args) {

        try {

            int randomValue = MINIMUM + (int) (Math.random() * MAXIMUM);
           
            if (randomValue <= 5) {
                throw new IOException("Ocorrido IOException");
            } else if (randomValue <= 10) {
                throw new IOError(new Throwable("Ocorrido IOError"));
            } else {
                throw new InternalError("Ocorrido InternalError");
            }
           

        } catch(IOException | IOError | InternalError e) {

            System.out.println(String.format("Falha lançada para teste: %s", e.getMessage()));

        }

    }

}


O lançamento da exceção é aleatório porque um valor aleatório entre 1 e 15 é gerado para randomValue. Logo após, são realizados testes de períodos numéricos para lançar as exceções variavelmente.

Importante: Se a superclasse de uma das exceções do exemplo for adicionada no mesmo catch, a exceção deve ser removida porque será capturada pela sua superclasse.

Até breve.

Nenhum comentário:

Postar um comentário