8

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

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

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

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

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

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

澄清: PMD 将具有单个返回语句的方法视为空。

4

2 回答 2

10

我认为这只是一个指导方针。它告诉您,您可能想重新考虑您的设计,但如果您的设计已经非常有意义,那么没有理由服从软件而不是您的大脑。

于 2009-04-16T10:45:32.300 回答
0

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

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

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

于 2016-09-01T12:54:59.737 回答