抽象类中的空方法

时间:2009-04-16 10:42:45

标签: language-agnostic design-patterns static-analysis

我刚刚安装了PMD来分析我的Java项目。非常好的工具,强烈推荐。 无论如何,我有一些错误说:

  

“抽象类中的空方法应该是抽象的”

我检查了PMD文档,解释说:

  

因为开发人员可能依赖于这个空实现而不是编写适当的实现

所以我认为我理解这种代码风格错误背后的原因,但请考虑以下场景:我有一个名为Entity的抽象类。该类具有默认实现的布尔方法。 (控制是否在删除时删除其相关实体)。只有少数派生类将此默认行为覆盖为true。

我应该删除默认实现并强制所有派生类声明其行为吗? 你真的认为这种模式是一种不好的做法吗?

澄清: PMD将单个return语句的方法视为空。

2 个答案:

答案 0 :(得分:10)

我认为这只是一个指导原则。它告诉你,你可能想重新考虑你的设计,但如果你的设计已经完全合理,那么没有理由服从软件而不是你的大脑。

答案 1 :(得分:0)

如果您使用的是Java 1.8,则可以使实体成为接口而不是抽象类,并为其中的方法编写默认实现。

public interface Entity {
    default boolean yourMethod() {
        //default implementation ...
    }
}

您可以将其用作参考: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html