Es gibt eine Checkstyle Regel DesignForExtension. Es heißt: Wenn Sie eine public/protected-Methode haben, die weder abstrakt noch final oder leer ist, ist sie nicht für die Erweiterung gedacht. Lesen Sie die description for this rule on the Checkstyle page für die Begründung.Howto Design für Erweiterung
Stellen Sie sich diesen Fall vor. Ich habe eine abstrakte Klasse, die für die Felder einige Felder und ein Validate-Methode definiert:
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();
}
Ich habe auch eine Unterklasse von Pflanze:
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
}
}
die Check Nach der Plant.validate Regel() -Methode ist nicht für die Erweiterung gedacht. Aber wie entwerfe ich in diesem Fall die Erweiterung?
Sie keine Illegal in einem Verfahren werfen sollte, die keine Argumente annimmt. .. – markt
@markt Lassen Sie uns vortäuschen, es ist IllegalStateException für das "Argument" :) –