Breve domanda: se utilizzo le funzionalità di linguaggio Java 7 relativamente "minori" precedentemente non disponibili in Java 6, come il blocco try-muticatch ... ciò implica che il mio programma non verrà eseguito nelle macchine con JRE 6 o JRE 5 installato dopo essere stato compilato così com'è? Se è corretto, c'è un modo rapido per produrre un eseguibile .jar JRE6 senza modificare un codice sorgente Java 7 (che, a proposito, l'unica funzionalità di Java 7 che userebbe è il blocco try-multicatch)?Compatibilità con le versioni precedenti di java 7
risposta
Sei corretto. Multi-catch è una funzionalità del linguaggio Java 7 e non esiste un modo per compilarlo in bytecode compatibile con JVM Java 6 (o precedente).
Utilizzando un compilatore Java 7, quanto segue permette di compilare Java 6 bytecode compatibile:
javac -source 1.6 -target 1.6 MyJavaFile.java
Quando si tenta di compilare un 7 caratteristica del linguaggio Java (multi-catch, per esempio) si vuole ottenere:
roach$ javac -source 1.6 -target 1.6 test.java
warning: [options] bootstrap class path not set in conjunction with -source 1.6
test.java:9: error: multi-catch statement is not supported in -source 1.6
} catch (NullPointerException | BufferOverflowException ex) {}
^
(use -source 7 or higher to enable multi-catch statement)
1 error
1 warning
(per di più su ciò che warning
mezzi, vedi: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source - non è relavent a questa discussione)
Se si modifica il flag -source
-1.7
riceverà:
source release 1.7 requires target release 1.7
Perché ... non è possibile compilare Java 7 fonte (ad esempio fonte che ha funzionalità Java 7) al codice byte compatibile con Java 6.
Se si compila con Java 7 (senza -source
o -target
bandiera) si otterrà Java 7 bytecode che non può essere eseguito su un < Java 7 JVM. E se provi a farlo, riceverai un errore che ti dice che le versioni non corrispondono:
roach$ /Library/Java/Home/bin/java net.mostlyharmless.multicatch.App
Exception in thread "main" java.lang.UnsupportedClassVersionError: net/mostlyharmless/multicatch/App : Unsupported major.minor version 51.0
non puoi compilare il sorgente con Java 7 funzioni in Java 6 .class perché questo
javac -source 1.7 -target 1.6 Test.java
produce source release 1.7 requires target release 1.7
errore. Questo perché alcune delle funzionalità 1.7 possono funzionare solo con le classi Java 7. Ad esempio, try-with-resources
utilizza il metodo Throwable.addSuppressed
disponibile solo dal 1.7
- 1. Android L: compatibilità con versioni Android precedenti
- 2. Compatibilità con Prism 6 con le versioni precedenti
- 3. .lib e .dll Compatibilità con versioni precedenti
- 4. Best practice per compatibilità con le versioni precedenti delle API
- 5. Compatibilità con le versioni precedenti del repository Git
- 6. Progettazione API che garantisce la compatibilità con le versioni precedenti
- 7. Compatibilità cacerts con le versioni java
- 8. Campo di classi anonimi che accedono alla compatibilità con Java 1.8 con le versioni precedenti
- 9. Completa comprensione delle versioni .NET e compatibilità con le versioni precedenti
- 10. Test con le versioni precedenti di Firefox
- 11. È l'aggiunta di un metodo tratto con l'implementazione che interrompe la compatibilità con le versioni precedenti?
- 12. Esiste un modo semplice per verificare la compatibilità con le versioni precedenti degli script di PowerShell?
- 13. Compatibilità con le versioni precedenti di SQL Server in Entity Framework?
- 14. Utilizzo delle funzionalità di iOS 5 senza compromettere la compatibilità con le versioni precedenti
- 15. Il linguaggio Java ha mantenuto la compatibilità con le versioni precedenti del codice sorgente nel corso della sua storia?
- 16. Compatibilità con le versioni precedenti del framework compatto .NET 3.5 e 2.0
- 17. Come rimuovere le versioni precedenti di Xcode
- 18. Grails 1.3.7/Java 7 Compatibilità
- 19. Dove posso trovare le versioni precedenti di JDK e JRE?
- 20. Come si compila un .java con supporto per le versioni precedenti di Java?
- 21. Migrazioni di EF compatibili con le versioni precedenti
- 22. Specifiche dell'icona WPF per supportare Windows 7 ed essere compatibile con le versioni precedenti
- 23. Come rendere InstallShield disinstallare le versioni precedenti?
- 24. Rileva versioni precedenti di IE
- 25. Compatibilità con le versioni precedenti di Mac OS X App 10.6 e 10.7 durante l'utilizzo di NSPopovers
- 26. Strumento per verificare la compatibilità con le versioni Matlab?
- 27. I pacchetti R compilati sono compatibili con le versioni precedenti?
- 28. Compatibilità con le versioni precedenti dell'API 21 di Android? (Da quando è uscito il nuovo aggiornamento dell'SDK)
- 29. Compatibilità con le versioni precedenti di materiali android: colorAccent richiede il livello API 21 quando si utilizza appcompat7
- 30. Qualche alternativa a Clirr (compatibilità binaria e sorgente con versioni precedenti)?