2016-08-18 34 views
1

assylias很好地解釋了關於final rethrow。 我加了最後的method3java7中的精確rethrow異常

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 
    } 
} 

我將我的編譯器設置爲1.7。 有兩個編譯錯誤:

final exception can neither be reassigned nor throw precise exception. 

所以,明確最終異常僅用於防止修改?

回答

0

Exception catch block是隱含的final這並不意味着你不能重新分配它。如果您專門製作了final,那麼編譯器將不允許您修改該引用。爲了使throw編譯異常實例必須是final有效final已經在鏈接的答案中進行了介紹。

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; 
    } 
} 

如此明確的最終異常僅用於防止修改?

是的,在例外的情況下,final修飾符是多餘的。它總是建議throwlog的例外。根據我的說法,任何異常的修改都是反模式。一般來說,即使在自定義異常的情況下,除非您有充足的理由這樣做,否則我們不應該修改拋出的異常。