我知道它是a good thing to always make exceptions serializable。但是,我是否也應該讓它們公開?即使他們只應該被內部抓到?我想知道如果這些例外情況不是公開的,那麼是否存在潛在的安全問題或序列化問題(例如跨域名的編組)。應該例外總是公開
Q
應該例外總是公開
4
A
回答
4
如果您知道的異常將總是可以通過自己的代碼捕獲,那麼OK使其internal
。
0
它與範圍界定任何東西都是一樣的。一切都應該在適當的範圍內。
如果您在特定的類中創建了一個異常,並且只在該類內部使用該異常,那麼它應該只在該類內有一個範圍,因此它應該是私有的。但是,這並不常見。
第二個例外情況是將交給另一個對象調用你的類,你應該公開它。這是例外最常見的用法,因此大多數例外應該是公開的。
4
事實上,如果它們不是接口的一部分,那麼就有內部異常沒有什麼不好。這意味着,但是,這種
- 要麼異常必須絕對不會越過你的模塊的邊界,
- 或者你提供一個公共基礎例外,你的模塊的用戶可以趕上。
事實上,這是一個好主意,宣佈公共基本異常類型的模塊,讓用戶可以隨時依靠它在他們catch
條款。如果你願意的話,從基類派生的單個異常可能是公開的,但可能不是那麼好。
請注意,您絕對不能依賴公共/私人機制來確保任何類型的安全性,因爲它可以通過簡單的反射輕鬆覆蓋。
0
想一想......這條鏈是多麼遙遠的異常?如果將從public函數拋出異常,那麼它應該是公開的。
也就是說,如果例外是總是在您的庫中捕獲並且不會拋出或重新貼上標籤並將其作爲別的東西拋出,它可以是內部的。
理想情況下,我有這樣的場景:
namespace MyAPI
{
public class PublicException : System.Exception
{
}
// derive my public exceptions from this
public class CatchableException : PublicException
{
}
// stuff that should never reach the users of my API
internal class InvisibleException : System.Exception
{
}
}
這樣一來,我的API的用戶有一個工廠趕任何例外,我扔。內部的人從來沒有那麼做過。
相關問題
- 1. 這是不應該使用公開
- 2. WSDL總是公開的嗎?
- 3. 應該是例外情況嗎?
- 4. zipfile.extractall總是給人例外
- 5. 應該WCF ServiceContracts總是IDisposable?
- 6. ImageView應該總是高於
- 7. 'ImportDeclaration.moduleSpecifier`應該總是StringLiterial嗎?
- 8. 我應該總是removeEventListener?
- 9. 我應該公開構圖對象嗎?
- 10. C#static void Main不應該公開嗎?
- 11. 我應該公開異步方法嗎?
- 12. config.h應該公開嗎?與Python衝突
- 13. Android的錯誤:這個類應該是公共的[可實例]
- 14. java:例外:總是終於到達?
- 15. WCF總是返回400例外
- 16. 我應該總是圍繞外鍵設計嗎?
- 17. 實體對象是否應該由存儲庫公開?
- 18. 我應該公開行動而不是事件嗎?
- 19. libx264.dll公開函數x264_encoder_open_130,不應該是x264_encoder_open?
- 20. 環保對象應該公開還是私密?
- 21. 是否應該通過ContentProviders公開所有數據?
- 22. 獲取例外不應該用UIButton的
- 23. 我應該預計哪個例外
- 24. 通知onBackpressed應該打開默認的LAUNCHER活動總是
- 25. 屬性觀察者何時應該運行?什麼是例外?
- 26. 應ResultSet公開
- 27. PHPExcel例外:公式錯誤:意外,
- 28. 向外部系統公開服務 - 我應該如何設計合同?
- 29. C#Task.Wait()總結例外
- 30. 總結所有例外
但是該頁面說,如果「你確定只是私下使用的異常」,這是OP的斷言的一部分,可以壓制該規則。 – Sven
並非如此:原因子句指出「非公共異常直接從** Exception,SystemException或ApplicationException派生**」。 – Vlad