簡單的問題:我想知道爲什麼Preferences
方法nodeExists()
拋出必須被捕獲的BackingStoreException
?究竟什麼原因會導致BackingStoreException
以及Preferences
API中的所有方法,爲什麼這種方法(而不是所有其他方法)都要求它被捕獲?爲什麼nodeExists()拋出BackingStoreException
讀取來自Preferences API文檔本款不幫助我很多:
的讀取從首喜好的方法的所有對象需要調用者提供一個默認值。如果先前未設置任何值或後備存儲不可用,則返回默認值。目的是允許應用程序運行,儘管功能略有降低,即使後備存儲變得不可用。有些方法(如flush)具有語義,在後備存儲不可用的情況下阻止它們運行。普通應用程序不應該調用任何這些方法,這些方法可以通過聲明拋出BackingStoreException的事實來識別。
也許我不明白,但支持存儲的不可用性是不是所有Preferences
方法的風險?上面的段落讓我覺得我正在調用一種我應該「不需要調用」的方法。然而,檢查節點是否存在似乎對我來說是一種常見操作。
每次我打電話nodeExists()
我必須在它周圍添加一個try/catch
塊並處理異常。
獲取節點的方法如何在沒有後備存儲的情況下繼續進行?我想我對有什麼後盾商店有些困惑,以及爲什麼有些操作可以在沒有它的情況下繼續...... – ryvantage
預期的用例首選項是存儲諸如最近打開的文檔列表之類的東西,窗口上次關閉時,啓動文件選擇器的目錄等,即改善用戶體驗但對應用程序的正常運行並不關鍵的事情。如果後備存儲(Windows上的註冊表,其他平臺的磁盤上的文件)因任何原因而不可用,則應用程序仍然可以工作,但用戶只會獲取默認值而不是他們的個人偏好。 –