Frage

Mein Verständnis ist, dass, um Quelle-Kompatibilität zu erhalten, Java nie neue Methoden für die öffentlichen Schnittstellen einführt, wie die bestehenden Kunden bricht die Schnittstellen zu implementieren. Java Release Notes Staaten

  

Im Allgemeinen ist die Politik ist wie folgt,   mit Ausnahme von Unverträglichkeiten   aufgelistet weiter unten:

     
      
  • Wartungsversionen (wie 1.4.1,   1.4.2) nicht einführen keine neuen Sprachfeatures oder APIs. Sie werden   Aufrechterhaltung source-Kompatibilität mit   jeder andere.

  •   
  • Funktionalität Mitteilungen und wichtige   Veröffentlichungen (wie 1.3.0, 1.4.0, 5.0)   halten nach oben, aber nicht nach unten   Quelle-Kompatibilität.

  •   

Doch die Pakete java.sql und javax.sql weiterhin viele inkompatible Änderungen zu entwickeln und einzuführen. Zum Beispiel, bemerkte ich die folgenden inkompatible Änderungen (eingeführt in Java 6):

Sie wissen, wie und warum wurden diese Methoden hinzugefügt? Ist java.sql ist anders als der Rest der Plattform behandelt? Kennen Sie die Diskussion / JSR um diese Ergänzungen?

War es hilfreich?

Lösung

Ich habe die folgende Antwort von einem Sun Developer

Die allgemeine Entwicklung Politik für APIs in das JDK für Feature-Releases wie JDK 7

  1. Binärkompatibilität nicht brechen (wie in JLSv3 Kapitel 13 definiert)
  2. Vermeiden Quelle Inkompatibilitäten Einführung
  3. Verwalten Verhalten Kompatibilität ändern

(Für mehr, viel mehr, als man auf verschiedene Arten der Kompatibilität siehe lesen möchte

"Kinds of Kompatibilität: Source, Binary und Behavioral" und "Kompatibel Evolving BigDecimal"

Methoden Schnittstellen Hinzufügen binär kompatibel und source unvereinbar, so ist es nicht häufig getan. Im Allgemeinen ist die breite implementiert eine Schnittstelle ist, desto weniger wahrscheinlich sind wir zu Methoden, um es hinzuzufügen. Der JDBC-Bereich ist eine Ausnahme von dieser Politik und verwendet lockeres Upgrade Regeln, aber das macht echte Probleme verursachen, wenn die Menschen in eine neuen JDK Version aktualisieren mögen.

Andere Tipps

Beachten Sie, dass das Hinzufügen von neuen Methoden nur Quelle Kompatibilität brechen, bereits kompilierten Implementierungen von Statement oder ResultSet in einem JDBC-Treiber wird sich weiterhin auf einem neueren JDK auszuführen. Nur wenn Sie versuchen, eine neue Methode nennen Sie eine NoSuchMethodError erhalten.

Sie wahrscheinlich, dass die Datenbanktreiber Anbieter übernehmen, dass diese Methoden halten up-to-date mit den neuen Java Runtimes implementieren, und dass es besser nützliche neue Methoden einzuführen und vorübergehend brechen Kompatibilität.

Natürlich haben sie es haben könnte entworfen besser, so dass die Kompatibilität zu brechen nicht notwendig wäre ...

So garantiert nie Quelle Kompatibilität zwischen den Versionen, nur binäre Kompatibilität. Das bekannteste Beispiel ist, dass der Quellcode, die ‚assert‘ oder ‚Enum‘ Bezeichner enthält, wird unter JDK 1.4 (für assert) oder 1.5+ (ENUM) nicht kompiliert, sondern bestehende .class-Dateien werden immer noch unter diesem neueren JVMs laufen.

Sie können versuchen, die -source Flagge eren .java-Dateien unter neuere JVMs zu kompilieren, aber Sie können immer noch Probleme auftreten, wenn Sie auf Jvm Klassen angewiesen sind, die sich geändert haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top