1
resposta

Múltiplas Exceptions em um código java que é usado como uma dll em outro sistema

Boa tarde.

Tenho uma dúvida que talvez seja mais conceitual, sobre o que seria uma boa prática do tratamento de exceptions numa situação mais específica.

Tenho uma classe java com um código que usa métodos que podem disparar múltiplas exceptions. Essa classe não tem um método main, pois trata-se de um pacote java que é usado dentro de outro sistema externo, não java; esse sistema externo instancia o java como se fosse uma dll e invoca seus métodos. Há na classe java um método para retornar, em forma de array de String, as descrições ou mensagens das exceptions - o sistema externo chama esse método para saber se a execução foi bem-sucedida e, se ocorreram exceptions, exibi-las em log.

Como quem dá manutenção no sistema externo pode não ser um programador java - aliás, geramente não é - , me preocupei em montar catchs para cada exception disparada por cada método usado dentro do java. Isso fez o código ficar bem maior do que normalmente, feio para qualquer programador java que o ler. Fiz isso com a intenção de facilitar a vida do programador do sistema externo - para ele saber exatamente em qual ponto do código java ocorreu a exception e qual foi a exeption.

Basicamente, fiz algo assim:

Class MinhaCalsse {

        private String[] erros;
        private int quantidadeErros;
        private static final int limitearray = 1000;

        public MinhaClasse() {
                erros = new String[limitearray];
                quantidadeErros = 0;
        }

        public String[] getErros() {
                return erros;
        }

        public void metodo1() {

                OutraClasse instancia = new OutraClasse();

                try {
                    instancia.metodo2();    
                } catch (Exception1 e) {
                        erros[quantidadeErros] = "Erro java método metodo1 - Erro ao obter valor tal";
                        quantidadeErros++;
                } catch (Exception2 e) {
                        erros[quantidadeErros] = "Erro java método metodo1 - Erro ao instanciar tal classe";
                        quantidadeErros++;
                } catch (Exception3 e) {
                        erros[quantidadeErros] = "Erro java método metodo1 - Erro ao calcular tal coisa";
                        quantidadeErros++;
                } catch (Exception4 e) {
                        erros[quantidadeErros] = "Erro java método metodo1 - Erro ao fazer tal coisa";
                        quantidadeErros++;
                }
        }
}

Enfim, cada exception disparada por metodo2() está sendo tratada em separado no código que a chama. Mas não por uma necessidade da lógica em si, apenas para exibir os diferentes erros e causas para o sistema externo.

E aí está minha dúvida: será que minha abordagem foi a correta? Ou será que há uma forma mais limpa de fazer isso e ainda manter o código java, digamos, menos complexo?

1 resposta

Por que você não usa apenas 1 catch e imprime qual foi a exceção?

catch (Exception e) {
            System.out.println("Erro " + e);
        }

Seria porque você não quer a mensagem em inglês? Caso seja esse o problema você pode usar

catch (Exception e) {
            System.out.println("Erro " +e.getLocalizedMessage());
        }

só que nesse caso você vai ter que criar uma classe de erro com o Extends RunTimeException no começo e vai ter que fazer o

@Override 

do método getLocalizedMessage() e lá você seta as mensagens de erro.