考慮以下簡化的界面的傳承層次結構:Java:如何避免派生接口中的棄用警告,該警告會覆蓋棄用的成員?
// Starting point:
public interface Base {
void Foo();
}
public interface Derived extends Base {
}
它的目的是從Base
界面移動Foo
方法將Derived
接口:
// Desired end-point:
public interface Base {
}
public interface Derived extends Base {
void Foo();
}
爲了相在此重大更改,期望在一段時間內保持接口的向後兼容性。
// 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
編譯器警告:
這可以通過標記爲@Deprecated
的Base
接口上的方法來實現
[棄用]接口Base中的Foo()已被棄用
奇怪的是,如果我從Base
的文檔中刪除@deprecated
(但保留@Deprecated),此警告消失。
我得到這個警告是否正確?如果是的話,我該如何解決這個問題?
警告似乎Derived.Foo
被 「使用」 通信Base.Foo
(其被建議使用)。但Derived.Foo
「使用」已棄用的Base.Foo
的唯一能力是覆蓋它。這似乎表明,您不允許在派生方法中覆蓋棄用的接口方法。
如果是這樣的話,那麼我應該用@SuppressWarnings("deprecation")
來裝飾Derived
來壓制警告嗎?
您正在使用哪個版本的Java?我似乎記得,這被認爲是一個錯誤,可能是固定的......但我不能確定我是否正確記住了這一點。我確切地看到你的意思。 – 2009-07-31 16:13:55