java 7 Sprache rückwärtskompatibilität

8

Kurze Frage: Wenn ich relativ "kleine" Java 7 Sprachfeatures verwende, die vorher in Java 6 nicht verfügbar waren, wie der try-muticatch Block ... bedeutet dies, dass mein Programm nicht auf Maschinen mit JRE 6 oder JRE läuft 5 nach der Kompilierung wie installiert installiert? Wenn das korrekt ist, gibt es eine schnelle Möglichkeit, eine ausführbare JRE6-JAR-Datei zu erstellen, ohne einen Java 7-Quellcode zu ändern (was übrigens das einzige Java 7-Feature ist, das try-multicatch-Block ist)?

    
deinocheirus 18.06.2013, 11:54
quelle

2 Antworten

8

Sie haben Recht. Multi-Catch ist ein Java 7-Sprachfeature und es gibt keine Möglichkeit, es zu Java 6 (oder früherem) JVM-kompatiblem Bytecode zu kompilieren.

Mit Hilfe eines Java 7-Compilers können Sie Java 6-kompatiblen Bytecode kompilieren:

javac -source 1.6 -target 1.6 MyJavaFile.java

Wenn Sie versuchen, ein Java 7-Sprachfeature zu kompilieren (zB Multi-Catch), erhalten Sie:

%Vor%

(Mehr zu dem, was warning bedeutet, siehe: Ссылка - es ist nicht relevant für diese Diskussion)

Wenn Sie das -source -Flag in 1.7 ändern, erhalten Sie:

  

Quell-Release 1.7 erfordert Ziel Release 1.7

Weil ... Sie Java 7-Quellen (z. B. Quellen mit Java 7-Funktionen) nicht mit Java 6-kompatiblen Bytecodes kompilieren können.

Wenn Sie es mit Java 7 kompilieren (ohne -source oder -target Flag), erhalten Sie Java 7 Bytecode, der nicht auf & lt; Java 7 JVM. Und wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, dass die Versionen nicht übereinstimmen:

  

roach $ / Library / Java / Startseite / bin / java net.mostlyharmless.multicatch.App
  Ausnahme im Thread "main" java.lang.UnsupportedClassVersionError:   net / mastersharmless / multicatch / App: Nicht unterstützte Major.Minor-Version   51.0

    
Brian Roach 18.06.2013, 13:12
quelle
7

Sie können Quelle mit Java 7-Features nicht in Java 6 .class kompilieren, weil dies

ist %Vor%

erzeugt source release 1.7 requires target release 1.7 Fehler. Dies liegt daran, dass einige der Features von 1.7 nur mit Java 7-Klassen funktionieren können. ZB try-with-resources verwendet Throwable.addSuppressed Methode nur verfügbar seit 1.7

    
Evgeniy Dorofeev 18.06.2013 12:11
quelle

Tags und Links