2011-02-11 41 views
3

这更多的是面向对象设计问题。应该延长RuntimeException吗?

所以,我有一个UnsuportedLocaleException将只用于应用程序的初始化阶段。我有两种选择:

  1. 扩展RuntimeException并将其保留在那里,没有任何处理逻辑(如果配置为=> apply defaults if wrong)。
  2. 扩展异常并处理它(涉及所有冗余编码等)。

我更喜欢第一个,但不知道这是否是正确的设计。

+0

duplicateated http://stackoverflow.com/questions/4233793/proper-use-of-runtimeexception – 2011-02-11 17:12:28

+1

你应该首先确定是否要强制调用者处理异常。如果调用者无法做任何有用的事情并且死亡,请扩展RuntimeException或可能的错误。 – 2011-02-11 17:18:22

回答

8

似乎对我完全合理。 RuntimeException是一个很好的例外基类,调用代码不应该尝试“处理” - 即当它们指示可能意味着整个应用程序或(可能对于服务器)请求应该简单地弃。

2

这里有几点意见。

首先(经典)说,在大多数情况下,你应该使用检查的异常。在这种情况下,方法必须将这个异常声明为其签名的一部分或者将其捕获。这种方法的优点是界面一直很清晰,每个层都关心其例外情况。但是这个方法非常冗长。有时你的代码变得更长,你必须纠正几个try/catch语句,而不是调用一些方法,并写一个if

其他方法是仅使用运行时异常。这种理念说,你不必处理异常,因为你与他们无关。在这种情况下,所有异常都是运行时并在一个中央模块中捕获和处理。例如Spring框架使用这种方法。

所以答案是你在开发什么。如果这是独立的库,使用检查定义良好的异常。如果是应用程序或应用程序框架,则可以使用Spring等运行时异常。