Private 생성자 밖에 없는 클래스는 final로 선언되어야 합니다.

 

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. :star2:

원문으로 바로가기

Star This Project