是否可以通过不抛出异常的基类的调用方法抛出java异常?

时间:2010-09-13 21:09:40

标签: java subclass throwable

这可能是一个关于异常处理的荒谬Java问题,但我有一个UI actor(一个Android Activity),它从我的ContentProvider子类请求服务。当sd-card已满,sd-card缺失,网络i / o错误等时,子类想要抛出一些异常。但是,当我编写CP子类来抛出异常时,编译器提供添加异常CP班。显然,我不想修改基类,但我希望UI能够捕获子类的异常。

有意义吗?这可能吗?如果没有,我的服务子类是否有更好的模式将其throwable对象返回给UI?

3 个答案:

答案 0 :(得分:8)

您可以抛出Unchecked exceptions,而无需将其添加到方法的原型中。

未经检查的异常是从RuntimeException继承的任何异常。那是你想做的吗?

答案 1 :(得分:6)

您可以抛出RuntimeException的子类实例,这些实例不会被编译器检查。

然而,话虽如此,空异常规范是基类方法的一部分。子类最好满足契约,因此子类实例可以在任何使用超类类型的代码中使用。 (这称为Liskov substitution principle。)

答案 2 :(得分:3)

您只需要声明并捕获“已检查的例外”。您不需要声明或明确捕获RuntimeExceptions。因此,您可以抛出RuntimeException并在层次结构中随时捕获它。