2016-08-18 3 views
1

assylias erklären gut über final rethrow. Ich fügte das Finale zu method3 hinzu.Präzise Wiederholung Ausnahme in Java7

public void method4() throws IOException { 
    try { 
     throw new IOException("1"); 
    } catch (final Exception e) { 
     e = new IOException("2"); //does not compile 
     throw e; //does not compile 
    } 
} 

Ich legte meinen Compiler auf 1.7. haben zwei Kompilierung Fehler:

final exception can neither be reassigned nor throw precise exception. 

So explizite letzte Ausnahme wird nur ändern, um zu verhindern verwendet?

Antwort

0

Exception von catch Block ist implizit final das bedeutet nicht, dass Sie es nicht neu zuweisen können. Wenn Sie es speziell final machen, wird der Compiler Ihnen nicht erlauben, diese Referenz zu ändern. Um throw kompilieren Ausnahme Instanz muss final oder effektivfinal als bereits in verknüpften Antwort abgedeckt sein.

public void method4() throws IOException { 
    try { 
     throw new IOException("1"); 
    } catch (final Exception e) { 
     e = new IOException("2");// You can not modify final reference 
     throw e; 
    } 
} 

so explizite letzte Ausnahme ist nur ändern, um zu verhindern verwendet?

Ja genau, falls ausnahmsweise final Modifikator ist überflüssig. Es wird immer empfohlen, throw oder log die Ausnahme. Änderung von jeder Ausnahme ist ein Antimuster gemäß mir. Im Allgemeinen sollten wir selbst im Falle einer benutzerdefinierten Ausnahme die ausgelöste Exception nur ändern, wenn Sie einen sehr starken Grund dafür haben.