我有一個方法可以處理不同的錯誤代碼并始終拋出未經檢查的異常。這個方法在全班很多地方都用到了。當我嘗試在另一個沒有 void 返回類型的方法中調用它時,如下所示:public Object someMethod() { .... if(success){ return result; } else { callMethodThatAlwaysThrowsUncheckedExceptions(); }}java 編譯器說該方法是missing return statement.如何解決這個問題,我想到了兩個選擇:用其內容替換方法調用在返回空對象的方法調用之后添加一個返回語句但是我真的不喜歡這些選項中的任何一個:第一個是因為代碼重復,第二個是因為需要編寫永遠不會執行的代碼。還有其他方法可以解決這個問題嗎?
2 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
只需交換條款,如果方法拋出,您將永遠無法返回。
if(!success){
callMethodThatAlwaysThrowsUncheckedExceptions();
}
return result;
甚至
callMethodThatAlwaysThrowsUncheckedExceptions(succes);
return result;
只需檢查您的投擲方法中的成功條件。

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
除了Slawomir Chodnicki 已經提供的出色答案之外,還有另一個建議。
callMethodThatAlwaysThrowsUncheckedExceptions()
將你的which somewhere throws an更改Exception
為工廠方法。例如:改變這個:
// somewhere in callMethodThatAlwaysThrowsUncheckedExceptions throw new MyException();
到:
return new MyException();
這樣你就可以像這樣調用那個方法:
throw callMethodThatAlwaysThrowsUncheckedExceptions();
因此將幫助編譯器看到這是該執行分支的最后一條語句。
這也適用于不同的例外情況,return
而不是throw
添加回答
舉報
0/150
提交
取消