Private 생성자 밖에 없는 클래스는 잘못된 상속이 발생하는 것을 막기위해 final로 선언되는 것이 낫습니다.
규칙을 어긴 코드
public class PrivateConstructorClass { // 규칙을 어긴 코드
private PrivateConstructorClass() {
// ...
}
public static int magic(){
return 42;
}
}
규칙을 준수한 해결책
public final class PrivateConstructorClass { // 규칙을 준수한 해결책
private PrivateConstructorClass() {
// ...
}
public static int magic(){
return 42;
}
}
역자 참고
원제는 Classes without "public" constructors should be "final"
으로 public 생성자가 없는 경우 final 을 사용해야 합니다
정도로 해석이 됩니다.
그런데 그렇게 되면 protected 생성자만 있는 경우에도 final class로 선언해야 한다는 의미로 해석이 됩니다.
하지만 final class로 선언할경우 상속이 불가하기 때문입니다.
이 두 내용은 서로 충돌하기 때문에, 제목을 규칙의 의도에 조금 더 가까운 Private 생성자 밖에 없는 클래스는 final로 선언되어야 합니다.
정도로 변경하였습니다.
final class Parent {
protected Parent(){
}
}
class Child extends Parent { // Cannot inherit from final
^^^^^^
}
If you like SONARKUBE, don’t forget to give me a star.