这可能是一个关于异常处理的荒谬Java问题,但我有一个UI actor(一个Android Activity),它从我的ContentProvider子类请求服务。当sd-card已满,sd-card缺失,网络i / o错误等时,子类想要抛出一些异常。但是,当我编写CP子类来抛出异常时,编译器提供添加异常CP班。显然,我不想修改基类,但我希望UI能够捕获子类的异常。
有意义吗?这可能吗?如果没有,我的服务子类是否有更好的模式将其throwable对象返回给UI?
答案 0 :(得分:8)
您可以抛出Unchecked exceptions
,而无需将其添加到方法的原型中。
未经检查的异常是从RuntimeException
继承的任何异常。那是你想做的吗?
答案 1 :(得分:6)
您可以抛出RuntimeException的子类实例,这些实例不会被编译器检查。
然而,话虽如此,空异常规范是基类方法的一部分。子类最好满足契约,因此子类实例可以在任何使用超类类型的代码中使用。 (这称为Liskov substitution principle。)
答案 2 :(得分:3)
您只需要声明并捕获“已检查的例外”。您不需要声明或明确捕获RuntimeExceptions。因此,您可以抛出RuntimeException并在层次结构中随时捕获它。