Có quy tắc CheckstyleDesignForExtension. Nó nói: nếu bạn có một phương pháp công cộng/được bảo vệ mà không phải là trừu tượng cũng không cuối cùng cũng không rỗng nó không phải là "được thiết kế cho phần mở rộng". Đọc số description for this rule on the Checkstyle page để biết lý do.Thiết kế cách mở rộng
Hãy tưởng tượng trường hợp này. Tôi có một lớp trừu tượng trong đó xác định một số lĩnh vực và một phương thức validate cho những lĩnh vực:
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();
}
Tôi cũng có một lớp con của thực vật:
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
}
}
Tiếp theo Checkstyle cai trị Plant.validate (phương pháp) không được thiết kế để mở rộng. Nhưng làm thế nào để thiết kế cho phần mở rộng trong trường hợp này?
Bạn không nên ném một IllegalArgumentException trong một phương pháp mà không có đối số. .. – markt
@markt Hãy giả vờ nó là IllegalStateException vì lợi ích của "đối số" :) –