Существует Checkstyle правило DesignForExtension. В нем говорится: если у вас есть общедоступный/защищенный метод, который не является абстрактным, ни окончательным, ни пустым, он не "предназначен для расширения". Прочитайте описание этого правила на странице Checkstyle для обоснования.
Представьте себе этот случай. У меня есть абстрактный класс, который определяет некоторые поля и метод проверки для этих полей:
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();
}
У меня также есть подкласс Plant:
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() не предназначен для расширения. Но как я могу создать расширение в этом случае?