@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 アノテーションがあるクラスのメソッドに対する冗長なアノテーションの適用