3

为什么java允许总是抛出异常的方法将返回类型声明为该异常?以下两种方法均有效:-

public RuntimeException alwaysFails() {
    throw new RuntimeException("failed");
}

public void alwaysFailsButVoid() {
    throw new RuntimeException("failed");
}

允许这样做有什么好处?

4

3 回答 3

11

您可以将任何类型声明为方法的返回类型。由于该方法永远不会正常返回,因此这是完全正确的(但具有误导性)。

请注意,Java 编译器通常无法确定您的方法何时可以正常返回(由于停止问题无法解决)。

允许这样做的好处是允许您子类化一个类或继承一个已经为该方法预先指定了返回类型的接口。这对于面向对象的编程至关重要。

于 2013-11-07T19:07:26.137 回答
4

返回和投掷不是一回事,它们是独立的。

于 2013-11-07T19:06:38.803 回答
0

我没有看到这个问题。返回类型和可能的异常之间没有编译时交叉检查。没有关系。编译器只检查哪些已检查异常是可能的,以及针对异常声明了哪些异常(显然,编译器在此之外做了更多工作)。

于 2013-11-07T19:07:33.713 回答