필드 시그니처 또는 메서드의 시그니처에 클래스가 사용되었으며 시그니처 내 클래스가 멤버 자체보다 가시성이 낮은 경우를 보고합니다.
Java에서는 유효하지만 이러한 멤버는 참조하는 클래스의 가시성 범위 밖에서 사용될 수 없습니다.
예:
public class Parent {
public Child getChild() {
return new Child();
}
private class Child {}
}
추가적으로, Java 9 이상에서 모듈은 클래스의 패키지를 내보내지 않는 방식으로 다른 모듈로부터 자신의 클래스를 숨길 수 있습니다.
그러나 내보낸 API의 일부인 멤버가 시그니처 내의 내보내지 않은 클래스를 참조하는 경우 그러한 멤버는 모듈 밖에서 사용될 수 없습니다.
검사 구성:
- 내보내지 않은 클래스가 모듈 API 내에서 노출되면 보고(Java 9 이상) 옵션을 사용하면 내보내지 않은 클래스를 노출하는 모듈 API 멤버를 보고합니다.
프로젝트 또는 모듈의 언어 수준이 9 이상이어야 이 옵션을 사용할 수 있습니다.
- public API 내에 노출된 액세스가 불가능한 클래스 보고 옵션을 사용하면 가시성 범위가 더 작은 클래스를 노출하는 public 멤버를 보고합니다.
- 패키지 로컬 API 내에 노출된 private 클래스를 보고 옵션을 사용하면
private 클래스를 노출하는 패키지 지역 멤버를 보고합니다.