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