2011-04-25 73 views
26

我使用的Checkstyle和我得到这个方法的错误:错误地发出Checkstyle“方法不适用于扩展”错误?

public final String getAdmitCodeStatus() { 
    return admitCodeStatus; 
} 

这是我得到的错误:

法“getAdmitCodeStatus”没有设计为可扩展 - 必须是抽象的,最终的或空的。

该方法不符合?有什么我做错了,Checkstyle会对我说这个方法吗?

+0

您是否有另一个getAdmitCodeStatus实例违反该规则?例如,是否有一个基类用非空的实体来实现该方法? – 2011-04-25 15:51:09

+0

你能否让课程成为最后一课,看看它是否会消失(如果你的课程确实可以成为最终课程)? – CoolBeans 2011-04-25 15:52:35

+0

@Chris:好主意,但我不知道。我只是做了一个搜索,以确保我没有其他方法分享这个名字。 – McGlone 2011-04-25 16:14:20

回答

26

它看起来是由DesignForExtension规则引起的。根据the documentation

检查类是否被设计用于扩展。更具体地说, 实施了一种编程风格,其中超类提供可以由子类实现的空的“挂钩” 。

确切的规则是类, 可以被子类的非专用,非静态方法必须是

abstract or 
final or 
have an empty implementation 

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

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

但你既是方法有final改性剂,我说你发现了一个bug,可能要记录一个错误报告。 https://github.com/checkstyle/checkstyle/issues

+5

-1这是如何回答这个问题的? – 2013-10-16 14:01:18

+0

@Chris你是对的。我修改了我的答案,表明它并没有真正回答OP的问题。 – Snekse 2014-01-17 21:46:06

0

乍一看它看起来像在地球上一种编程风格,这是什么......这 检查只是无论您是刨的方法来被继承或不...然后你可以宣布他们final,abstract or empty implementation. 然后你声明它最终...;) 类可以是最终的或方法个人取决于需求方案。

+0

这似乎没有回答这个问题。 OP正在宣布他的方法是最终的,这似乎满足了规则,他正在寻找一个解释为什么他仍然得到错误。 – 2013-10-16 14:19:43

+0

这是我的坏Nathan! 我没有正确阅读。 我也是新来的,所以我请求你的赦免,并且在从现在开始张贴时要多加小心。 谢谢! :) – 2013-10-16 17:48:52

+0

不用担心,误读问题很容易做到,我一直这么做。 – 2013-10-16 17:55:34

0

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