31

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

public final String getAdmitCodeStatus() {
    return admitCodeStatus;
}

这是我得到的错误:

方法“getAdmitCodeStatus”不是为扩展而设计的——需要是抽象的、最终的或空的。

该方法如何不合规?Checkstyle 会因为这种方法对我大吼大叫,是不是我做错了什么?

4

3 回答 3

32

看来是DesignForExtension规则造成的。根据文档

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

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

abstract or
final or
have an empty implementation

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

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

但是由于您的方法有一个final修饰符,我会说您发现了一个错误并且可能想要记录一个错误报告。 https://github.com/checkstyle/checkstyle/issues

于 2012-04-16T14:44:58.487 回答
1

乍一看,这到底是一种什么样的编程风格...这只是检查您是否正在计划要继承的方法...然后您可以声明它们final,abstract or empty implementation. 然后您将其声明为最终...; )根据需求场景,类可以是最终的,也可以是单独的方法。

于 2013-10-16T13:55:32.563 回答
0

我认为此检查很有用,并且大多数情况下警告是合理的。有时它不合适,然后我忽略它。

于 2016-12-05T20:23:46.617 回答