2010-03-19 61 views
3

方法實現我剛纔看到的代碼片段是這樣的:這種情況在Java中

private static class DefaultErrorHandler<RT> implements ErrorHandler<RT> { 
    public RT handle(Object[] params, Throwable e) { 
    return Exceptions.throwUncheckedException(e); 
    } 
} 

現在我想知道什麼靜態方法throwUncheckedException (Throwable e)將返回究竟如何可能對於仿製藥來實現。

有人可以舉個例子嗎?

+1

所以,你想返回一個值**和**拋出一個未經檢查的異常? – Jeremy 2010-03-19 17:53:38

+0

是的。在執行過程中,總是拋出一個異常,而返回值則是編譯器的噓聲。 – Yardena 2010-03-31 14:50:14

回答

1

我會猜測,它包括:

throw new RuntimeException(e);

不過說真的,我猜測,返回值是作秀。該方法被稱爲「扔」。

如果它返回一些東西,它將返回類型爲'RT'的東西,不管它是什麼。

4

你會定義方法是這樣的:

public static <T> T throwUncheckedException (Throwable e) { ... } 

這基本上意味着「任何類型的T,返回它」。那麼你依靠the compiler's ability to guess T = RT。

我認爲從throwUncheckedException方法返回值的想法如下:你想調用一個總是拋出運行時異常的方法,並且你從非void方法調用它。 Java編譯器抱怨調用者在每個執行分支的末尾需要一個return語句。這個技巧爲您節省了對「虛擬回報」的需求。

0

讓方法throwUncheckedException()返回某些內容可以避免調用方法中需要返回值的額外行。

曾有如下異常直接從手柄的方法拋出:

public RT handle(Object[] params, Throwable e) { 
    throw new RuntimeException(e); 
} 

不會一直需要return語句(它甚至會一直實際上是非法的),因爲編譯器將能夠知道,拋出後的任何語句都將無法訪問。

但是由於throw是在另一個方法中完成的,並且由於handle方法需要返回值,所以必須添加return statememt。

讓throwUncheckedException()返回某個東西可以使該調用處於return語句中。

的throwUncheckedException()必須是一個接近:

public static <T> T throwUncheckedException(Throwable e) { 
    throw new RuntimeException(e); 
    return null; 
} 

恕我直言,這樣的事實,這就提出你的問題表明,實在是太令人費解的是值得的。也許更好的方式來實現相同的目標將是這樣的:

public RT handle(Object[] params, Throwable e) { 
    throw Exceptions.makeUncheckedException(e); 
}