Java 6 Quelle Abwärtskompatibilität und SQL
-
12-09-2019 - |
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):
-
java.sql.Statement
erstrecktjava.sql.Wrapper
, erfordern neue zwei neue Methoden. -
java.sql.Statement
stellt 3 neue Methoden -
java.sql.PreparedStatement
stellt 19 neue Methoden ! -
java.sql.ResultSet
stellt 48 neue Methoden !
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?
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
- Binärkompatibilität nicht brechen (wie in JLSv3 Kapitel 13 definiert)
- Vermeiden Quelle Inkompatibilitäten Einführung
- 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.