7

@Deprecated アノテーションを使用して、クラスに含まれるすべてのメソッドとフィールドではなく、特定のクラスの拡張のみを非推奨にしたいと考えています。

つまり、特定のクラスを拡張すると警告が発生しますが、メソッドまたはフィールドへの参照は警告をトリガーしません。このクラスを拡張するいくつかのクラスが既にあり、これらのクライアントを対象とする非推奨の警告を表示したいと考えています - まだそれらを壊すことはできません (ただし、再コンパイルすることはできます - ABI 互換性は必要ありません)。

Java 1.6 (JDT コンパイラ) で可能ですか?

4

5 に答える 5

5

2 つの考慮事項

1) クラスはすでに拡張されている可能性があるため、final とマークしないでください。そうしないと、下位互換性が失われる可能性があります。

2) クラスを拡張したくないので、final とマークする必要があります。

あなたがすべきことは、古いクラスを新しいクラスで拡張し、古いクラスを非推奨としてマークし、新しいクラスを final と宣言することだと思います。新しいクラスでは、@SuppressWarning タグを追加して非推奨のメッセージを静かにすることができます。その後、クリーン コンパイルを取得する必要があります。

古いクラスを使用するコードは @Deprecated 警告を受け取りますが、それでもコンパイルされます。新しいクラスを使用するコードは問題なくコンパイルされます。下位互換性の中断ではなく、ユーザーへの「強力な提案」のようなものであり、API は 100% 互換性があるため、修正は非常に簡単です。

于 2011-02-14T19:38:15.790 に答える