Tenho a seguinte situação:
Um método que chama outro, que chama outro, que chama outro. Nesse ultimo, de acordo com situações especificas, terá que interromper a execução dele mesmo, além de todos os outros métodos que chamaram ele, menos o primeiro método que é o metodo main.
Por exemplo:
public static void main(String[] args) {
metodoUm();
System.out.println("Isso aqui deve mostrar de qualquer jeito...");
}
private static void metodoUm() {
metodoDois();
System.out.println("Isso deve ser mostrado caso de tudo certo");
}
private static void metodoDois() {
metodoTres();
System.out.println("Isso deve ser mostrado caso de tudo certo");
}
private static void metodoTres() {
try {
System.out.println("Tudo deu certo");
} catch (Exception e) {
System.out.println("Deu pau, não deve mostrar nada alem disso e daquela mensagem no método main");
}
}
Alguma idéia de como fazer isso sem muita gambiarra?
Lança uma exceção com throw e provoca a interrupção em cadeia. Exemplo:
public static void main(String[] args) {
try {
metodoUm();
} catch (IOException e) {
System.err.println(e.getMessage());
}
System.out.println("Isso aqui deve mostrar de qualquer jeito...");
}
private static void metodoUm() throws IOException {
metodoDois();
System.out.println("Isso deve ser mostrado caso de tudo certo");
}
private static void metodoDois() throws IOException {
metodoTres();
System.out.println("Isso deve ser mostrado caso de tudo certo");
}
private static void metodoTres() throws IOException {
try {
System.out.println("Tudo deu certo");
} catch (Exception e) {
throw new IOException("Deu pau, nãdeve mostrar nada alem disso e daquela mensagem no método main");
}
}
wiliamps
foi o que eu imaginei tambem, porém vai ficar complicado pois no sistema eu ja estou fazendo o try catch dentro do ultimo método e caso da algum erro, simplesmente mando um System.exit(1) e mostra uma mensagem pro usuario… se for fazer desse jeito, vou ter que criar excessões especificas pra cada caso e tratar elas todas no método principal…
Acredito que a barreira sua seja a forma de seu algoritimo, pois apenas sugeri uma técnica.
Você também pode fazer seus métodos retornarem o resultado, pode ser booleano por exemplo. Se true, tudo certo, seguir, senão é que deu erro.
Outra forma é um atributo de classe tipo um semáforo, você deixa ele verde para o trânsito seguir, mas se tive um acidente, você liga o farol vermelho.
wiliamps