这更像是一个面向对象设计的问题。
我有一个UnsuportedLocaleException,它只会在应用程序的初始化阶段使用。我有两个选项:
- 继承RuntimeException并使其不带任何处理逻辑(作为配置 => 如果错误,则应用默认值)。
- 继承Exception并处理它(涉及所有冗余编码等)。
我更喜欢第一个选项,但不确定是否正确的设计。
这更像是一个面向对象设计的问题。
我有一个UnsuportedLocaleException,它只会在应用程序的初始化阶段使用。我有两个选项:
我更喜欢第一个选项,但不确定是否正确的设计。
我认为这完全合理。 RuntimeException
是一种很好的异常基类,用于表示调用代码不应该“处理”的异常 - 也就是当它们指示了一种可能意味着整个应用程序或者(对于服务器)请求应该被放弃的故障类型时。
Integer.parse(s)
与s
=""
的区别和 1/x
与 x
=0
的区别在哪里?两者都可能是编程错误,而且s
和x
都可能来自用户。 - maaartinus这里有几种不同的观点。
首先(经典观点)认为,在大多数情况下应该使用checked exceptions。在这种情况下,方法必须将此异常声明为其签名的一部分或捕获它。这种方法的优点是接口始终清晰,并且每个层都关心自己的异常。但是这种方法相当冗长。有时你的代码会变得更长,你必须写几个try/catch语句,而不是调用几个方法并写一个if
语句。
另一种方法是仅使用运行时异常。这种哲学认为,你不必处理异常,因为你与异常无关。在这种情况下,所有异常都是运行时异常,并在一个中央模块中捕获和处理。例如Spring框架采用了这种方法。
因此,答案取决于你正在开发的内容。如果这是独立的库,请使用已定义良好的checked exceptions。如果是应用程序或应用程序框架,则可以像Spring一样使用运行时异常。