我与IBM Rational Software Architect for Websphere Software (RAD)合作并运行代码分析器。我收到警告说自定义 java 异常类应该是最终的。但是没有适当的理由。无论如何,对于某些要求,我们必须扩展自定义异常类以维护异常层次结构。所以最后是没有用的。在某些情况下,如果我们想限制对象创建,我们可以将构造函数标记为私有。
那么,任何人都可以让我知道为什么自定义异常类应该是最终的吗?
我会向您推荐这本书 Effective Java : Josh Bloch 用很好的论据将类标记为 final 或记录扩展点以保持不变性并防止意外行为。
我指的是第 17 条(继承的设计和文件,否则禁止它)
无论如何,这可能只是一个建议,如果你确信你可以忽略它——这只是为了确保你已经考虑过了。
使类 Final 的唯一原因是避免它被其他类扩展。考虑到这一点,是否要使课程成为最终课程取决于您。
将类设为“最终”的一个很好的替代方法是将其构造函数设为私有并提供静态工厂(也在 Josh Bloch 的书中进行了描述)。但是,当然,正如已经说过的,这取决于你上课的目的是什么。
我相信您的自定义异常类将扩展异常类。此自定义类将特定于您希望处理的异常。因此,除非您真的希望向其添加另一个层次结构,否则将此类设为 final 是有意义的。如果您希望创建另一个自定义异常类,您可以通过再次扩展异常类来实现。此外,您会收到警告说它必须是最终的,但如果您有一些需要更多继承层次结构的要求,您可以将您的类定义为非最终的。