[英]Wrapping an unchecked exception into a checked exception in Java
我正在阅读别人编写的代码。 未检查的异常和检查的异常都是自定义异常。 我看到一个未检查的异常被抛出到一个方法内部,并且被包裹在一个catch子句中的被检查的异常中,并再次被抛出。 通常将未检查的异常包装到已检查的异常中吗? 如果是,我们为什么要这样做?
应用程序可能为其依赖的服务定义接口。 如果实现抛出了应用程序要特定处理的,特定于实现的未检查异常,则它会被特定于实现的异常类型污染。 如果替换实现,这将导致维护麻烦。
为避免此问题,可以将未检查的异常包装在接口定义的与实现无关的已检查异常中。
作为一个具体的例子,考虑一下Hibernate使用未经检查的异常来通知调用者约束违例。 假设您有一个User
实体,并且用户名在数据库中定义了唯一约束。 您想通过提示用户输入其他名称来专门处理这种情况。 如果Hibernate的ConstraintViolationException
沿堆栈ConstraintViolationException
传播,则应用程序将需要特定于Hibernate的处理程序。 另一方面,如果数据访问层将其包装在合适的自定义检查异常中,则用新的ORM实现替换Hibernate不需要对实现层进行任何更改。
如果您在方法meth
此操作,则可能是因为代码调用
meth
只需知道并检查已检查的异常。
假设meth
可以抛出5种不同类型的未经检查的异常,
您可以使这一点更加统一,并允许调用代码只担心
关于检查的。 但是当然可以使用未经检查的异常
也要包装 只是编译器将无法
在调用代码方面有很大帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.