簡體   English   中英

Java中的OurCompanyRuntimeException類型有什么意義?

[英]What's the point of an OurCompanyRuntimeException type in Java?

在我現在所在的公司,代碼中有很多地方拋出OurCompanyRuntimeException(其中OurCompany是公司的實際名稱)。 據我所知,這個異常被描述為“我們在這家公司寫的代碼拋出的運行時異常”。

我有點新的爪哇,但我認為異常類型被認為反映了什么問題,而不是其代碼拋出異常。 例如,IllegalArgumentException意味着有人將非法參數傳遞給了某些東西。 如果在Sun編寫的代碼中傳遞了非法參數,那么就不會有SunIllegalArgumentException,然后是IBMIllegalArgumentException - 這將是愚蠢而毫無意義的,對吧? 如果您想知道拋出異常的位置,可以查看堆棧跟蹤。 我理解想要擴展RuntimeException(這樣你就沒有盡可能多的嘗試/捕獲或“拋出”),但為什么不創建解釋發生了什么的子類,而不是發生在公司的代碼中呢?

有沒有人曾經使用過OurCompanyRuntimeException這個想法,或者想知道他們為什么會這樣做?

聽起來像你在內部代碼庫中發現的通常的定制代碼廢話。 我懷疑,如果你問一下,根據一個沒有人敢提出疑問且很久以前就已經移動的高級家伙的一些錯誤的邏輯,我們會有一些法令判斷使用了OurCompanyRuntimeException - 猴子,香蕉和軟管彈簧的故事去提醒。

我同意你的看法,例外的名稱應該表明發生了錯誤。

幫助讀取堆棧跟蹤時,這是肯定的。 即,當掃描“由'引起'的許多行時,有助於看到它發生在你拋出的東西中,而不是內部的東西,比如容器。

還允許您作為throwable的一部分執行自定義操作 - 例如,在某處寫入特殊日志等。

是的,我也遇到過,但對我來說也沒有意義。 我的猜測是,這些公司在采用Java之后很早就寫了這個例外而沒有正確理解異常拋出和處理是如何工作的(就像Nick已經說過的那樣......高級程序員沒有人敢提出質疑)。 如果公司認為需要創建自己的異常類(例如,對於公司特定的日志記錄porpuses),則不應該直接拋出此異常(使其成為抽象)。 我會得到具體的問題來描述異常,或者只是遵循Spring Framework的異常處理/拋出的想法。

這是一個糟糕的概念。 例外情況應該針對用例。

好的,如果公司確實產生了很多錯誤的代碼/產品,他們可能會使用這種類型的例外作為廣告;)

您的公司可能正在向現有項目添加代碼,例如開源代碼庫,並且可能只是添加了非常少的代碼。 因此,為了跟蹤公司開發人員發生的錯誤,他們認為他們將擁有自己的異常類來區分之前存在的錯誤和擴展引起的錯誤。 這樣,他們可以只關注由公司開發人員引起的那些,並且可能要求原始源代碼維護者修復其他的。

隨着時間的推移,當人們通過內部開發開發了足夠大的代碼庫時,您可以添加更多異常並刪除CompanynameRuntimeException altogother。 此外,他們可能會更熟悉開發人員的專業水平,允許他們將所有錯誤視為一個錯誤,而不是更加懷疑地看待公司開發人員造成的錯誤。

將此作為特定異常的基類是非常有意義的。 您拋出一個特定的異常並捕獲基類。

此外,它可能允許攜帶原因(REAL異常)以及周圍的其他信息。 這對於為日志記錄創建診斷輸出非常方便。

看起來非常愚蠢,記錄輸出或堆棧跟蹤將顯示違規類是誰,因此解釋不會洗。 同樣看起來很危險,好像鼓勵人們拋出OurCompanyRuntimeException他們正在拋出RuntimeExceptions,它不會強制調用者處理它們並且可以取消你的應用程序。

我同意你的看法,例外情況應反映其背后的原因。 我已經看到一個自定義異常作為層次結構的根,雖然它可能應該是抽象的,所以你需要創建一個特定的擴展來使用它,它絕對不應該是RuntimeException。

擁有一個通用的公司范圍的異常類並不是一個壞主意,就像你描述更具體的異常情況繼承一樣。 一個答案已經提到了能夠專門捕獲內部代碼異常並忽略/傳遞核心java或第三方庫代碼中的異常的能力。 這里的關鍵點是更具體的例外應該從這個例外繼承。 很少需要拋出一個通用的公司命名異常,幾乎從不推薦。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM