如何设计扩展
有一个 Checkstyle 规则 DesignForExtension。它说:如果你有一个公共/受保护的方法,它不是抽象的,也不是最终的,也不是空的,它不是“为扩展而设计的”。阅读“检查样式”页面上此规则的说明,了解基本原理。
想象一下这种情况。我有一个抽象类,它定义了一些字段和这些字段的验证方法:
public abstract class Plant {
private String roots;
private String trunk;
// setters go here
protected void validate() {
if (roots == null) throw new IllegalArgumentException("No roots!");
if (trunk == null) throw new IllegalArgumentException("No trunk!");
}
public abstract void grow();
}
我还有一个植物的子类:
public class Tree extends Plant {
private List<String> leaves;
// setters go here
@Overrides
protected void validate() {
super.validate();
if (leaves == null) throw new IllegalArgumentException("No leaves!");
}
public void grow() {
validate();
// grow process
}
}
按照 Checkstyle 规则,Plant.validate() 方法不是为扩展而设计的。但是在这种情况下,我如何设计扩展?