Java 5.0 nicht rückwärtskompatibel
Kann ich mit dem Compiler aus dem Java Development Kit (JDK) 5.0 mit der neuen Java-Sprache Class-Dateien erzeugen, die auch mit einer älteren Ausgabe der Virtual Machine (VM) laufen?
- Karsten Violka
Kann ich mit dem Compiler aus dem Java Development Kit (JDK) 5.0 mit der neuen Java-Sprache Class-Dateien erzeugen, die auch mit einer älteren Ausgabe der Virtual Machine (VM) laufen?
Die kurze Antwort: Nein. Mit dem Schalter -target 1.4 können Sie zwar Class-Dateien für eine ältere VM kompilieren, das funktioniert aber nur, wenn Sie gleichzeitig den Schalter -source 1.4 setzen - dann versteht javac die neue Sprache aber nicht mehr. Die Kombination -source 1.5 -target 1.4 quittiert javac mit einer Fehlermeldung.
Technisch gesehen sollte es eigentlich kein Problem sein, denn die Spezifikation für den Bytecode, den javac ausspuckt, hat sich kaum geändert. Der Compiler fügt etwa automatisch Cast-Anweisungen in den Bytecode ein, an die ein Entwickler, der generische Datentypen verwendet, nicht mehr denken muss.
Tatsächlich kennt der neue javac den undokumentierten und von Sun nicht empfohlenen Schalter -target jsr14, der aus neuem Quelltext Bytecode für die VM-Version 1.4 erzeugt, ohne sich zu beschweren. Trotzdem ist Java 5.0 nicht rückwärtskompatibel, wie Neal Gafter, der bis vor wenigen Monaten den javac bei Sun entwickelte, c't bestätigte. Viele der Spracherweiterungen setzen Funktionen der neuen Klassenbibliothek voraus und funktionieren deshalb nicht in einer Java-1.4-Umgebung. So leiten die neuen Aufzählungstypen mit dem Schlüsselwort enum stets einen neuen Typ von java.lang.Enum ab und die neue for-each-Schleife arbeitet mit dem Interface java.lang.Iterable, die im API der Version 1.4 ebenfalls fehlt. Eine Garantie, dass die mit jsr14-Schalter übersetzten Programme überall laufen, gibt es also nicht. (kav)
(kav)