[英]throws Exception refactoring in java
我正在更改我的代碼
Implementation 1 :
public User getUser(String userid) {
User user;
try {
// some code to get User
}catch(InterruptedException e) {
throw new CustomException();
}
return user;
}
到
Implementation 2 :
public User getUser(String userid) {
User user;
try {
// some code to get User
}catch(InterruptedException e) {
SomeHandlerInProject.throwCustomErr();
}
return user;
}
class SomeHandlerInProject {
public static void throwCustomErr() {
throw new CustomException();
}
}
實現 2 給出了用戶可能未初始化的編譯錯誤,有人可以幫助我在這里缺少什么,對我來說似乎很奇怪。
編譯器並不知道SomeHandlerInProject.throwCustomErr()
總是拋出異常,所以就編譯器代碼分析而言,該方法可能會正常返回。
如果是這樣, user
的價值是什么? 它沒有值,所以編譯器會抱怨它,因為它應該。 請記住,類SomeHandlerInProject
可以更改為不拋出異常,而不必使用getUser()
方法重新編譯該類,因此編譯器抱怨它是正確的。
即使您知道該方法總是會拋出異常,您仍然必須編寫代碼,就好像它不會一樣,因此您必須為user
賦值,或者通過初始化它,或者通過在catch
塊中為其賦值。
如果目標是共享構建異常所需的邏輯,您應該讓輔助方法return
異常,而不是拋出異常,並讓調用者執行throw
。 這樣編譯器就不會抱怨:
public User getUser(String userid) {
User user;
try {
// some code to get User
} catch (InterruptedException e) {
throw SomeHandlerInProject.buildCustomErr();
}
return user;
}
class SomeHandlerInProject {
public static CustomException buildCustomErr() {
return new CustomException();
}
}
堆棧跟蹤保持不變,因為它是為調用堆棧快照的構造函數位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.