Is Java bytecode compatible with different versions of Java?

痞子三分冷 提交于 2020-01-11 09:48:08

问题


If I compile an application using Java 5 code into bytecode, are the resulting .class files going to be able to run under Java 1.4?

If the latter can work and I'm trying to use a Java 5 framework in my Java 1.4 application, is there anything I should watch out for?


回答1:


Nope! .class files are forward compatible only. Java 5 introduced new classfile attributes and format changes, to handle Varargs, enums, and generics. Java 4 would just fail when processing these.

However, there is the unsupported -target jsr14 option on javac that generates JDK 1.4-compatible bytecode for some Java 5 language features.

Also, there are projects (e.g. Retroweaver, Retrotranslator) that convert Java 5 classfiles into Java 4 files.

EDIT: I found this good resource: Using Java 5 language features in earlier JDKs




回答2:


No. You can only move upwards - Java 1.4 bytecode will work on Java 5 runtimes. However, if you aren't using any functionality not found in Java 1.4, you can compile using the -target and -source options of javac.

If you want to use Java 5 to write an application that can be run on Java 4, you can't use any features that weren't present before Java 5.




回答3:


No they are not. .class files are forward compatible only.

Java5 framework implies that your library is probably using generics or annotations that are incompatible with your 1.4 environment. You have to evaluate how much risk there is for you to run your 1.4 application under a 1.5 JVM to enable use of the frameworks you require.

In general I've found moving to 1.5 to be mostly painless, but diligent testing is called-for.



来源:https://stackoverflow.com/questions/1266940/is-java-bytecode-compatible-with-different-versions-of-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!