這個問題更多的是關於設計和乾淨的代碼,我很難理解什麼時候應該拋出一個checked checked,或者我們應該返回一個空值並檢查在客戶端如果這個值爲空或不是。當用戶會話過期或返回空時拋出異常
據我所知,檢查異常應該用於可能發生異常情況的情況,但我們無法阻止它。另外我已經讀過,我們不應該使用異常作爲控制流。所以在我的情況下,我正在編寫一個併發的應用程序,其中很多用戶會發出請求,並且我有一個方法來檢查用戶會話是否過期(並且在10分鐘後過期),所以,我在teorically應該拋出一個異常,因爲我不能防止這種情況,但另一方面,如果這種情況每10分鐘發生一次,異常是昂貴的,也許如果我返回一個null,我做檢查客戶會更好的表現。你會在這種情況下做什麼?
這是我的方法:
@Override
public Integer getUserIdBySessionKey(String sessionKey) {
User user = userSessions.get(sessionKey);
boolean isUserSessionValid = isUserSessionValid(user);
return isUserSessionValid ? user.getUserId() : null;
}
*我有一個方法來檢查用戶會話是否過期*:然後如果會話過期,我會返回true,否則返回false。我猜你的方法實際上並沒有這樣做。發佈代碼而不是描述它。 –
@JB Nizet,完成。我的問題是,到目前爲止,我返回null是會話無效,但我可以拋出一個「ExpiredSessionException」,也許是一個選項或另一個之間進行選擇不是一個大問題,但我想在最乾淨可能的方式 – fgonzalez
如果有機會讓調用代碼從這種情況下恢復,那麼我會返回一個可選。另一方面,如果調用代碼不應該處理這種情況,並且只是希望在會話無效時調用全局異常處理程序,那麼我會拋出一個運行時異常。無論如何,我不會拋出一個檢查的異常。 –