检查样式"Method Not Designed For Extension"错误错误?



我正在使用Checkstyle,并得到关于此方法的错误:

public final String getAdmitCodeStatus() {
    return admitCodeStatus;
}

下面是我得到的错误:

方法'getAdmitCodeStatus'不是为扩展设计的-需要是抽象的、最终的或空的。

为什么这个方法不兼容?是否我做错了什么,Checkstyle会对我吼叫这个方法?

看起来是由DesignForExtension规则引起的。根据文档:

检查类是为扩展而设计的。更具体地说,强制一种超类提供空"钩子"的编程风格可以通过子类实现。

确切的规则是类的非私有、非静态方法可以被子类化的必须是

abstract or
final or
have an empty implementation

基本原理:这种API设计风格保护超类不被由子类划分。缺点是子类在它们的灵活性,特别是它们不能阻止代码的执行在超类中,但这也意味着子类不能损坏由于忘记调用父类方法而导致的父类状态

来源:http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html

但是因为你的方法有一个final修饰符,我想说你发现了一个bug,可能想要记录一个bug报告。https://github.com/checkstyle/checkstyle/issues

乍一看,这到底是什么编程风格…这只是检查你是否计划要继承的方法。然后申报为final,abstract or empty implementation.然后你宣布它是最终的…;)类可以是最终的,方法也可以是独立的,这取决于需求场景。

我认为这个检查是有用的,大多数时候警告是合理的。有时候不合适,我就忽略了。

最新更新