我使用 IBM Rational Software Architect for Websphere Software(RAD)并运行代码分析器。我收到警告说自定义java异常类应该是final。但没有正当理由。无论如何,对于某些要求,我们必须扩展自定义异常类以维护异常层次结构。所以决赛是没用的。在某些情况下,如果我们想限制对象创建,我们可以将构造函数标记为私有。
那么,任何正文都可以让我知道为什么自定义异常类应该是最终的?
答案 0 :(得分:4)
我会把你推荐给有效Java书:Josh Bloch用最好的标记类最终说明,或者记录扩展点以保护不变性并防止意外行为。
我指的是Item 17(继承的设计和文档,或者禁止它)
在任何情况下,这可能只是一个建议,如果你确信你可以忽略它 - 只是为了确保你已经考虑过它。
答案 1 :(得分:0)
你的自定义异常类将扩展我相信的Exception类。此自定义类将特定于您希望处理的异常。因此,除非你真的希望为它添加另一层次的层次结构,否则使这个类最终有意义。如果您希望创建另一个自定义异常类,可以通过再次扩展异常类来实现。此外,您还会收到警告,说它必须是最终的,但如果您有一些需要更多级别的继承层次结构,则可以将您的类定义为非最终类。
答案 2 :(得分:0)
创建一个类Final的唯一原因是避免它被其他类扩展。考虑到这一点,无论你是否想让课程成为最终,你都能胜任。
答案 3 :(得分:0)
使类'final'的一个很好的选择是将其构造函数设为私有并改为提供静态工厂(在Josh Bloch的书中也有描述)。但当然,正如已经说过的那样,这取决于你班级的目的是什么。