我們應該爲每個實體類型創建一個特定的Exception
類嗎?
如果您的代碼的調用者可以合理地從找到實體定義的失敗中恢復,並且可以從每種實體類型採取不同的恢復策略中受益,那麼是的。否則不。
我們可以安全使用泛型嗎?像這個類一樣,NotFoundException擴展了Exception,然後構造函數負責聲明我們正在處理的實體類型?
它不會幫助您的代碼的調用者切換與失敗相關的實體類型。
即使你由於類型擦除定義異常類型MyParameterizedException<T>
然後,調用者不能做
try {
callYourCode();
} catch (MyParameterizedException<TypeA> ex) {
// some handling code
} catch (MyParameterizedException<TypeB> ex) {
// some different handling code for type b
}
因爲類型擦除它看起來像
try {
callYourCode();
} catch (MyParameterizedException ex) {
// some handling code
} catch (MyParameterizedException ex) {
// some different handling code for type b
}
和第二catch
塊將無法訪問的代碼,因此將在編譯時被javac
拒絕。第一個catch塊將被輸入爲b類型並鍵入一個實體(以及其他任何類型)。
如果我們應該拋出一個特定的異常而不使用泛型,那麼這些異常是否應該擴展或實現NotFoundException
抽象類或接口?
如果你的代碼的調用者會感到驚訝,如果他們沒有那麼是的。
如果您的代碼的調用者將受益於由處理其他NotFoundException
的代碼處理實體失敗,那麼是的。
如果您的代碼的調用者可能不希望找到與其他NotFound
條件相同的方式處理的實體類型定義失敗,則不會。
要注意的一點是,EntityNotFoundException是javax.persistance.EntityNotFoundException的重複名稱。 –