次の簡略化されたインターフェイス継承階層を検討してください。
// Starting point:
public interface Base {
void Foo();
}
public interface Derived extends Base {
}
Foo
メソッドをBase
インターフェイスからインターフェイスに移動することを目的としていDerived
ます。
// Desired end-point:
public interface Base {
}
public interface Derived extends Base {
void Foo();
}
この重大な変更を段階的にBase
導入するために、しばらくの間、インターフェイスの後方互換性を維持することが望まれます。
Base
これは、インターフェイスのメソッドを次のようにマークすることで実現できます@Deprecated
。
// Intermediate state:
public interface Base {
/**
* @deprecated This method is deprecated as of release X. Derived.Foo should be used instead.
*/
@Deprecated void Foo();
}
public interface Derived extends Base {
void Foo();
}
このコードをコンパイルすると、次のコンパイラ警告が表示されDerived
ます。
[非推奨] インターフェース Base の Foo() は非推奨になりました
@deprecated
奇妙なことに、ドキュメントからを削除するとBase
(ただし、@Deprecated はそのままにしておきます)、この警告は消えます。
この警告が表示されるのは正しいですか? もしそうなら、どうすればこれを回避できますか?
Derived.Foo
警告は、 「使用中」であることを伝えているようですBase.Foo
(これは非推奨です)。Derived.Foo
しかし、非推奨を「使用」している唯一の能力は、それBase.Foo
をオーバーライドすることです。派生メソッドで非推奨のインターフェイス メソッドをオーバーライドすることは許可されていないようです。
この場合、警告を抑制するために装飾Derived
する必要がありますか?@SuppressWarnings("deprecation")