Betrachten Sie die folgende vereinfachte Schnittstelle inheritence Hierarchie:Java: Wie kann man veraltete Warnungen in abgeleiteten Schnittstellen vermeiden, die veraltete Elemente außer Kraft setzen?
// Starting point:
public interface Base {
void Foo();
}
public interface Derived extends Base {
}
Es ist beabsichtigt, die Foo
Methode aus der Base
Schnittstelle zum Derived
Schnittstelle zu verschieben:
// Desired end-point:
public interface Base {
}
public interface Derived extends Base {
void Foo();
}
Um Phase in diesem unterbrechende Änderung, Es ist erwünscht, die Rückwärtskompatibilität der Schnittstelle für einige Zeit beizubehalten.
Dies kann durch Markieren des Verfahrens auf der Base
Schnittstelle als @Deprecated
erreicht werden:
// 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();
}
Wenn ich diesen Code, den ich eine Compiler-Warnung für Derived
erhalten kompilieren:
[deprecation] Foo() in der Schnittstelle Base wurde veraltet
Seltsamerweise, wenn ich die @deprecated
aus der Dokumentation in Base
entfernen (aber die @Deprecated verlassen) diese Warnung verschwindet.
Ist es richtig, dass ich diese Warnung bekomme, und wenn ja, wie kann ich das umgehen?
Die Warnung scheint, dass Derived.Foo
wird "mit" Base.Foo
zu kommunizieren (die veraltet ist). Die einzige Kapazität, in der Derived.Foo
die veraltete Version Base.Foo
"verwendet", besteht darin, sie zu überschreiben. Das scheint zu sagen, dass es Ihnen nicht erlaubt ist, veraltete Methoden in abgeleiteten Methoden zu überschreiben.
Wenn dies der Fall ist, sollte ich dann Derived
mit @SuppressWarnings("deprecation")
verzieren, um die Warnung zu unterdrücken?
Welche Java-Version verwenden Sie? Ich erinnere mich, dass dies zu einem bestimmten Zeitpunkt als Fehler angesehen wurde, möglicherweise behoben ... aber ich kann mir nicht sicher sein, ob ich mich richtig daran erinnere. Ich habe genau gesehen, was du meinst. –