检查样式“方法不是为扩展而设计的”错误被错误地发出?

2022-09-01 10:55:52

我正在使用Checkstyle,并且收到有关此方法的错误:

public final String getAdmitCodeStatus() {
    return admitCodeStatus;
}

这是我得到的错误:

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

该方法如何不合规?我做错了什么,Checkstyle会对我吠叫这种方法吗?


答案 1

它似乎是由规则引起的。根据文档DesignForExtension

检查类是否为扩展而设计。更具体地说,它强制实施一种编程风格,其中超类提供可由子类实现的空“钩子”。

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

abstract or
final or
have an empty implementation

基本原理:这种 API 设计风格可保护超类免受子类破坏。缺点是子类的灵活性有限,特别是它们不能阻止在超类中执行代码,但这也意味着子类不能通过忘记调用超方法来破坏超类的状态。

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

但是由于您的方法具有修饰符,因此我认为您发现了一个错误,并且可能想要记录错误报告。https://github.com/checkstyle/checkstyle/issuesfinal


答案 2

乍一看,这到底是什么编程风格......这只会检查您是否正在规划要继承的方法...然后你可以声明它们 然后你宣布它是最终的... ;)类可以是最终的,也可以是单独的方法,具体取决于要求方案。final,abstract or empty implementation.


推荐