2012-06-28 50 views
8

我剛開始使用新的Eclipse 4.2(Juno)空分析。有沒有辦法將Java方法標記(例如註釋)爲永不返回?

在這樣的代碼:

x = foo(); 
if (x == null) 
    fail("x is null"); 
return x.bar(); 

我收到x可以是空的警告。但它不可能,因爲失敗總是拋出,因此永遠不會返回。 (通過更好的程序間分析,它可能會自動確定這一點,但它目前似乎並不存在)。

顯然,有些方法可以重寫代碼以避開警告,但是我想要的是一種指示(例如註釋)失敗的方式永不返回。

我也試圖用@SuppressWarnings(「null」)來壓制這個警告,但那不起作用。擺脫警告

一種方法是添加:assert x != null;(假設你已經打開的設置,包括在無效分析稱)

在GCC C++我可以這樣做:void fn __attribute__ ((noreturn))

+0

我不知道這種情況。你是否需要這個,還是更多的是學術探究? – BlackVegetable

+1

這並不重要,因爲我可以輕鬆解決它,但它來自實際生產代碼。 –

回答

11

一個半 - 傳統的方式來做到這一點如下:

public RuntimeException fail(String message) { 
    throw new RuntimeException(message); 
} 

所以你可以寫throw fail("x is null")。當然,fail將始終最終做投擲,而不是throw,但它足以讓編譯器確信該線將始終拋出。

+1

有趣的解決方法。有沒有人推薦這種模式使用? – BlackVegetable

+4

僅供參考,它是Guava在'Throwables'工具類中使用的模式。 –

+0

爲什麼這比'public RuntimeException失敗(String message)更好{ } return new RuntimeException(message); }'?我只是在問一個問題,而不是表達一種偏好。 – emory

相關問題