我有一个界面
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。
有什么建议?感谢。
答案 0 :(得分:5)
Checkstyle
表示类或方法应标记为final
,因为它不是空的,因此不适合被覆盖。
这是Checkstyle
的一条规则,我个人并不认同并且往往会禁用。
答案 1 :(得分:5)
Checkstyle抛出此消息是因为您提供了一个实现但未将该方法标记为final。您可以通过Eclipse Preferences禁用此检查并编辑Checkstyle配置。具体规则是Class Design>扩展设计。
支票的描述相当不错,如下:
检查类是否设计用于扩展。更具体地说,它强制执行一种编程风格,其中超类提供可由子类实现的空“钩子”。 确切的规则是可以被子类化的非私有非静态类方法必须是
- 摘要或
- final或
- 有一个空实现
基本原理:这种API设计风格可以保护超类免受子类破坏。缺点是子类的灵活性有限,特别是它们不能阻止超类中代码的执行,但这也意味着子类不能通过忘记调用super方法来破坏超类的状态。