@ApiStatus.NonExtendable로 표시된 API 요소를 확장, 구현 또는 재정의하는 클래스, 인터페이스 및 메서드를 보고합니다.
@ApiStatus.NonExtendable 어노테이션은 클래스, 인터페이스 또는 메서드가 확장되거나, 구현되거나, 재정의되어서는 안 된다는 것을 나타냅니다.
그러한 인터페이스 및 클래스를 내부 라이브러리 구현으로 형 변환하는 것은 꽤 흔한 일이므로 클라이언트에서 다른 구현을 제공한다면 ClassCastException이 발생합니다.
그러한 클래스 및 인터페이스에 새 추상 메서드를 추가하면 클라이언트 구현에 대한 호환성을 잃습니다.
예:
// 업스트림 라이브러리 코드 내
@ApiStatus.NonExtendable
public interface MyService {
public void perform();
}
// 다운스트림 클라이언트 코드 내
public class MyServiceImpl implements MyService {
@Override
public void perform() {
// ...
}
}
이 검사는 또한 어노테이션을 잘못 적용하여 발생하는 다음과 같은 문제를 탐지합니다.
@ApiStatus.NonExtendable 어노테이션이 이미 달린 클래스의 메서드에 불필요하게 어노테이션을 추가