我们可以在抛出中使用泛型异常吗?

时间:2017-06-01 12:40:49

标签: java exception throws

我有一个愚蠢的怀疑。在使用throws时,我知道我们指定了多个例外。我的查询是否可以包含Exception(通用)以及其他特定的例外情况?这是正确的编码方法吗?

public String display() throws IOException, FileNotFoundException, Exception {
    ...
}

这里使用Exception是正确的方法??

3 个答案:

答案 0 :(得分:4)

这是合法代码。

这是一个坏主意。

这是一个坏主意的原因是调用者现在必须处理(或传播)Exception。但是Exception几乎可以是任何东西。如果您不知道它可能是什么,如何在异常处理程序中执行任何明智的 1 异常?

我认为,如果您不知道异常的原因是什么,那么您可以做的唯一完全安全的事情是记录并终止应用程序。在某些情况下,您可以尝试记录异常,"失败"请求并继续下一个。如果服务可用性是最高优先级,那么这可能是一种明智的策略,并且系统被设计为健壮的(例如,幂等请求,事务实现)。但是,这种方法存在增加损害的风险。但是抛出Exception的问题在于你更难区分可恢复的错误和不可恢复的错误。

答案 1 :(得分:2)

这是合法的Java代码。

Exception声明中使用throws的第一部分。

在它建议该方法可以抛出绝对任何已检查的异常之前,很少应该在生产代码中编写,这是非常罕见的。

但它目前用于Junit测试。测试功能的目的是测试一个功能,并且应该尽可能简单,因为它不会包含逻辑错误。因此,将测试编写为:

是很常见的
@Test
public void testFeature() throws Exception {
    //actual test that can call any function declaring checked exception
}

这只是意味着您不必担心在测试体中使用的函数中声明的可能异常。

但是除了其他异常(子)类之外,您的代码还声明了Exception 。这没用,因为所有异常类都是Exception的子类,因此IOExceptionFileNotFoundException Exception s。

所以即使合法,这也没有意义:如果你将Exception放在throws声明中,你应该删除所有其他异常类,因为它们已经包含在Exception声明中

答案 2 :(得分:0)

在我看来,方法可以抛出一般的异常,当你的业务逻辑和你的管道工作就像应用程序必须继续工作,即使在致命错误后,将此错误记录为FFDC并继续工作。如果您的应用程序必须在致命错误后关闭,那么您的方法不得抛出通用异常。