5

我有一个界面

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

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

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

当我运行 checkstyle 时,它​​会将错误标记getConnectionWrapper()为 - 方法“getConnectionWrapper”不是为扩展而设计的 - 需要是抽象的、最终的或空的。有什么建议吗?谢谢。

4

2 回答 2

6

Checkstyle是说应该将类或方法标记为,final因为它是非空的,因此不是为被覆盖而设计的。

这是Checkstyle我个人不同意并倾向于禁用的规则之一。

于 2013-07-30T12:57:42.360 回答
5

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

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

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

  • 抽象或
  • 最终或
  • 有一个空的实现

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

于 2013-07-30T13:43:49.330 回答