Ich würde mir keine Sorgen machen. Oracle ist ein Geschäft. Wenn sie eine Änderung an einem ihrer üblichen APIs vorgenommen haben, die dafür gesorgt hat, dass viele Programme nicht mehr funktionieren, wäre das ein großes blaues Auge für sie und würde ihre Marke beschädigen. Sie werden das nicht tun.
Wenn sie eine inkompatible Änderung planen, glaube ich, dass sie damit anfangen würden, jede Methode, die sie in einer zukünftigen Version entfernen möchten, als "veraltet" zu markieren. Es gibt auch eine @Deprecated
Annotation, die dazu führt, dass Compiler und IDEs Warnungen generieren. Dies sollte den Benutzern des Features eine faire Warnung geben, dass sie eventuell Änderungen vornehmen müssen. Ich weiß nicht, wie lange Benutzer in der Regel haben, bevor sie müssen eine Änderung vornehmen, aber es scheint mir, dass einige Java-Funktionen als veraltet für mehrere Versionen markiert wurden. (Ausnahme:. roh generische Typen werden als etwas dokumentiert, die verschwinden könnten Also, wenn Sie ein Objekt deklarieren ein Set
zu sein, im Gegensatz zu einem Set<SomeType>
oder Set<?>
, dass konnte Pause in einer zukünftigen Version von Java.)
Ein Vorbehalt: Dies gilt nur für Eigenschaften, die in der API dokumentiert sind. Im Fall von Set
, insbesondere, besagt die Dokumentation, dass, wenn Sie durch eine Menge iterieren (z. B. for (element : mySet)
), die Reihenfolge undefiniert ist, es sei denn, die tatsächliche Menge ist eine Implementierung, die besagt, dass die Reihenfolge definiert ist. Insbesondere wird es für eine HashSet
undefiniert sein. Das bedeutet, wenn Sie absichtlich oder unabsichtlich Code schreiben, der nur funktioniert, wenn die Ergebnisse in einer bestimmten Reihenfolge ausgegeben werden, kann Ihr Code in der nächsten Version beschädigt werden.
EDIT: Zur Frage, ob Methoden zu einer Schnittstelle hinzugefügt werden könnten: Beachten Sie, dass Methoden nicht das Hinzufügen normalen Code nicht bricht, die bereits bereitgestellte Objekte verwendet, die Instanzen der Schnittstelle sind, aber es könnte Code brechen, implementiert die Schnittstelle. Für Schnittstellen, die hauptsächlich bereitgestellt werden, damit Benutzercode sie implementieren kann (z. B. Runnable
, funktionale Schnittstellen), könnte das Hinzufügen von Methoden (außer default
Methoden) viel Code zerstören, also nehme ich an, dass sie das Hinzufügen von Methoden vermeiden würden Grund. (Wenn sie eine Methode hinzufügen wollten, könnten sie eine neue Subschnittstelle definieren.) Für die Auflistungsklassen wie Set
ist es etwas weniger klar, da es für Code normaler ist, eine der Implementierungen zu verwenden, die Java bereits bietet; Die eigene Implementierung zu entwickeln scheint ziemlich ungewöhnlich. Im Gegensatz zu meiner ersten Version dieser Antwort konnte ich jedoch keine Fälle finden, bei denen eine nicht standardmäßige Methode zu einer dieser Schnittstellen hinzugefügt wurde.
Was meinen Sie mit "konstant"? – pvg
Und was meinst du mit "immer"? –