簡體   English   中英

在Java中拋出匿名異常

[英]Throw anonymous exceptions in Java

在Java中有可能拋出任何異常,即使它只是在拋出的時刻聲明,例如下面的例子:

import org.springframework.dao.DataAccessException;

 // DataAccessException - is abstract class

 } catch (DataAccessException dae) {
      throw new DataAccessException("Exception while executing SQL: \n" + sql
            +    "\nparams: " + paramsToString(params), dae) {
                          private static final long serialVersionUID = 1L;
      };
 } 

請分享您的想法這種方法有多糟糕或不好。

同樣的問題是擴展RuntimeException(不是抽象的)並立即拋出它。

請分享您的想法這種方法有多糟糕或不好。

它應該是合法的...根據我對Java語言的理解。

從功能的角度來看,我認為這是毫無意義的。 調用者仍然必須捕獲您創建匿名子類型的基本異常。 而且它不像匿名子類的名稱傳達任何有用的信息......

從代碼可讀性和可維護性的角度來看,我認為這很糟糕。 這是沒有充分理由的模糊,也沒有我能辨認出的有用效果。

做一些奇怪的事情就像它可能會破壞一些東西......例如你的調試器,源代碼分析器或Java鏈中的其他工具。


總之,沒有兌換功能是一個壞主意。

是。 你的例子完全沒問題。 Exception實例只是一個類(擴展了Exception)名稱以及捕獲時需要的信息。 通常,類名稱就是您所需要的(對於catch語句)。 通常包括消息和堆棧跟蹤。 (雖然它們對於捕獲的異常都是無用的。)但有時需要更多信息。 擴展課程是一種很好的方法。

如果性能很重要(使用SQL時可能不會)覆蓋fillInStackTrace 填充堆棧跟蹤很慢,如果您計划捕獲異常,則不需要它。

不要擴展RunTimeException; 你不會被告知可以拋出它的方法,你可能忘了抓住它。

暫無
暫無

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

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