我刚刚安装了PMD来分析我的Java项目。非常好的工具,强烈推荐。 无论如何,我有一些错误说:
“抽象类中的空方法应该是抽象的”
我检查了PMD文档,解释说:
因为开发人员可能依赖于这个空实现而不是编写适当的实现
所以我认为我理解这种代码风格错误背后的原因,但请考虑以下场景:我有一个名为Entity的抽象类。该类具有默认实现的布尔方法。 (控制是否在删除时删除其相关实体)。只有少数派生类将此默认行为覆盖为true。
我应该删除默认实现并强制所有派生类声明其行为吗? 你真的认为这种模式是一种不好的做法吗?
澄清: PMD将单个return语句的方法视为空。
答案 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