我正在使用Checkstyle,并且收到有关此方法的错误:
public final String getAdmitCodeStatus() {
return admitCodeStatus;
}
这是我得到的错误:
方法'getAdmitCodeStatus'不是为扩展而设计的 - 需要是abstract,final或empty。
该方法如何不符合要求?有什么我做错了,Checkstyle会对我这个方法咆哮吗?
答案 0 :(得分:31)
它看起来是由DesignForExtension
规则引起的。根据{{3}}:
检查类是否设计用于扩展。更具体地说,它 强制执行编程风格,其中超类提供空的“挂钩” 可以由子类实现。
确切的规则是非私有的,非静态的类方法 可以被子类化必须是
abstract or final or have an empty implementation
基本原理:这种API设计风格可以保护超类不受影响 被子类打破。缺点是子类受到限制 他们的灵活性,特别是他们无法阻止代码的执行 在超类中,但这也意味着子类不能破坏 忘记调用超级方法的超类状态。
但是由于你的方法有一个final
修饰符,我会说你发现了一个错误,可能想记录错误报告。
http://sonar.15.n6.nabble.com/design-for-extension-rule-tp3200037p3200043.html
答案 1 :(得分:1)
乍一看,它看起来像地球上的编程风格是什么......
这只是检查你是否正在计划要继承的方法......然后你可以声明它们final,abstract or empty implementation.
然后你宣布它是最终的...;)
根据需求情景,该类可以是最终的,也可以是单独的方法。
答案 2 :(得分:0)
我认为此检查很有用,而且大多数情况下警告都是合理的。有时这是不合适的,然后我忽略它。