我有一些关于在 Java 中处理异常的问题。我读了一些关于它的内容,并得到了一些相互矛盾的指导方针。
让我们看一下上面提到的文章:
它指出,如果“客户端代码无能为力” ,通常应该避免使用检查异常。但这究竟是什么意思?在 GUI 中显示错误消息是冒泡检查异常的充分理由吗?但它会迫使 GUI 程序员记住捕获 RuntimeExceptions 及其后代以显示潜在的错误信息。
本文提出的第二种观点是,除非我想在其中实现一些自定义字段/方法,否则应该避免发明自己的异常类。我通常不同意这一点,我今天的实践正好相反:我将异常包装在我自己的异常结构中,以反映我编写的类实现的目标,即使它们只是扩展 Exception 而不添加任何新方法。我认为它有助于在抛出时在更高层更灵活地处理它们,而且对于将使用这些类的程序员来说,它通常更清晰易懂。
我今天实现了一些代码,文章中介绍的“新方法”在这里和那里抛出 RuntimeException,然后我让Sonar分析它。为了让我更加困惑,Sonar 将我的 RuntimeExceptions 标记为重大错误,并带有一条消息,例如“避免抛出根类型异常,将它们包装在您自己的类型中”。
所以看起来很有争议,你怎么看?
我今天还从一位技术负责人那里听说,仅仅包装异常是不好的,“因为这对 JVM 来说是一项非常昂贵的操作”。对我来说,另一方面,到处抛出 SQLExceptions 或 IOExceptions 看起来有点破坏封装..
那么你对我在这里提出的问题的一般态度是什么?
什么时候在我自己的类型中包装异常,什么时候我不应该这样做?
'客户端对此无能为力,抛出运行时异常?'
性能问题呢?