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

时间:2013-07-30 12:55:07

标签: java checkstyle

我有一个界面

public interface LdapConnectionFactory {
    LdapConnectionWrapper getConnectionWrapper() throws LDAPException;
}

以及实现LdapConnectionFactoryImpl方法的实现类getConnectionWrapper()

public class LdapConnectionFactoryImpl implements LdapConnectionFactory {
    ...
    public LdapConnectionWrapper getConnectionWrapper() throws LDAPException {
        ...
    }
}

当我运行checkstyle时,它将getConnectionWrapper()标记为错误 - 方法'getConnectionWrapper'不是为扩展而设计的 - 需要是abstract,final或empty。 有什么建议?感谢。

2 个答案:

答案 0 :(得分:5)

Checkstyle表示类或方法应标记为final,因为它不是空的,因此不适合被覆盖。

这是Checkstyle的一条规则,我个人并不认同并且往往会禁用。

答案 1 :(得分:5)

Checkstyle抛出此消息是因为您提供了一个实现但未将该方法标记为final。您可以通过Eclipse Preferences禁用此检查并编辑Checkstyle配置。具体规则是Class Design>扩展设计。

支票的描述相当不错,如下:

  

检查类是否设计用于扩展。更具体地说,它强制执行一种编程风格,其中超类提供可由子类实现的空“钩子”。   确切的规则是可以被子类化的非私有非静态类方法必须是

     
      
  • 摘要或
  •   
  • final或
  •   
  • 有一个空实现
  •   
     

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