当前位置: 首页 > 面试题库 >

在Java中,使用throws Exception而不是抛出多个特定异常是一种好习惯吗?

凌恩
2023-03-14
问题内容

在浏览Spring MVC框架时,我注意到,除非引起我的误解,否则它的开发人员倾向于抛出Exception而不是抛出多个异常。

我意识到,此问题的核心是检查异常与未检查异常的辩论,以避免发生宗教战争,使用抛出通用异常是否是一种好习惯?


问题答案:

对于诸如Spring
MVC之类的库来说,什么是有意义的,它需要足够开放才能适合各种不同的用例,但在编写特定的应用程序时,遵循您的想法并不一定有意义。这是其中一种情况。

如果您要引用的类(例如Controller接口)作为方法签名,例如

handleRequest(HttpServletRequest request, HttpServletResponse response) 
   throws Exception

这很可能是因为,从调用您的Controller的Spring类(例如DispatcherServlet)的角度来看,它们并不关心您的代码调用的是哪种类型的Exception-
库代码(例如)DispatcherServlet仅需要知道此类可能抛出Exception因此可以在一般情况下处理Exception。

换句话说,DispatcherServlet不需要知道您的控制器可能抛出哪种特定类型的Exception-
它将把它们中的任何一个都视为“错误”。这就是方法签名为的原因throws Exception

现在,API作者可以使签名使用自定义的异常类型作为SpringMvcException,但这只会迫使您处理方法中所有已检查的异常类型handleRequest并将它们包装起来,这是乏味的工作样板代码。因此,由于Spring的几乎所有功能都是为了使您尽可能轻松,轻便地与之集成而设计的,因此让他们仅指定interface方法就更容易了throws Exception



 类似资料:
  • 问题内容: 通过Joshua Bloch的“ Effective Java-Second Edition”,我偶然发现了第152页上的以下代码: 现在令我困惑的是,主动抛出该异常。那被认为是好的做法吗?据我所知,断言用于避免与代码发生干扰,因此在启动Java编程时未启用断言且因此未执行断言语句时,行为不会改变。如果我在没有启用断言的情况下运行程序时得到一个提示,我就会很困惑。 尽管我知道示例案例可

  • 问题内容: 我知道关键字存在于Java中。但是我不记得看到使用它的代码。可能我正在使用异常,并在本可以使用的地方登录。在Java中使用关键字是否是一种好习惯? 编辑 :我知道断言通常是一个好习惯。我的问题是,更准确地说,如果在Java中断言的BKM是使用关键字而不是使用异常,日志记录和其他技术。 问题答案: 不使用断言的主要原因是因为默认情况下未启用断言。因此,如果您的条件足够重要而需要断言,则不

  • 问题内容: 该方案。我在写与游戏相关的代码。在该游戏中,(同时也是一个类)具有的列表。有迹象表明,从继承其他类型的项目,例如,或。 显然,拥有我很方便。但是,当我获得玩家物品时,我唯一可以区分哪种物品的方法就是使用关键字。我确信我已经读过,依赖它是不好的做法。 在这种情况下可以使用吗?还是我应该重新考虑我的所有结构? 问题答案: 假设我正在写一些库存代码: 这样可以编译并正常工作。但是它错过了面向

  • 问题内容: 我听说捕捞是一种不好的做法,我认为这样做是明智的。让传播到顶部将允许检测出问题。但是很多时候我已经看到很多朋友直接被捕获,因此他们不必理会上面代码中可能发生的所有不同种类的异常。这是一个好习惯吗?还有哪些其他最好不处理的例外情况?此外,对我来说,处理一个确定了异常源的特定代码对我来说也很有意义。那么什么时候处理异常,什么时候不应该处理?最好不处理的异常清单可能是什么? 问题答案: 宠物

  • 问题内容: 关于Javadoc的内容不多。(简而言之:它返回字符串的规范表示形式,从而允许使用来比较内部字符串==) 我什么时候可以使用此功能? 是否存在Javadoc中未提及的副作用,即JIT编译器或多或少的优化? 还有其他用途吗? 问题答案: 我何时会使用此函数来支持String.equals() 当你需要速度时,因为可以按引用比较字符串(==比等于快) 是否有Javadoc中未提及的副作用?

  • 问题内容: 在企业应用程序中使用MS SQL Identity是否是好的做法?在创建业务逻辑以及将数据库从一个迁移到另一个时,难道不是很困难吗? 问题答案: 是的,它们工作得很好,可靠,性能最佳。与不使用身份字段相比,使用身份字段的一大好处是它们可以处理多个调用方尝试保留新ID的所有复杂的并发问题。这看起来似乎是微不足道的代码,但事实并非如此。 以下这些链接提供了一些有关身份字段以及为什么应尽可能