想在Java 1.4的虚拟机中使用Generic?

Java 5在语言方面增加了7个提高易用性的新特性, Joshua Bloch为了满足程序员们中"直有不知手之舞之足之蹈之者"的需要,还改写了William Blake的 Tiger。但是为了保持向后兼容,除了annotation之外,其他6个特性,包括generic, autobox/unbox, loop enhancement, enum, static import和varags都只是在源代码级别的改进,编译出来的字节码都是一样的,这就提供了一种可能性,用Java 5的语法写出来的源程序,只要不使用annotation和enum(因为1.4中没有Enum抽象类),并且没有使用Java 5的新类库,就有可能被编译到1.4的虚拟机上运行。事实上,Sun JDK的javac编译器和Eclipse的java编译器确实都支持这种方式. Javac可以指定-target jsr14, 对于Eclipse 3.2,可以在项目的配置文件.setting\org.eclipse.jdt.core.prefs中加上一行org.eclipse.jdt.core.compiler.codegen.targetPlatform = 1.4即可。这个小tip可能对一些不得不在JRE1.4下运行程序的tx有用。请注意,这是一个非标准的选项,所以得不到官方的技术支持和稳定性方面的保证。不过Harmony项目由于暂时没有稳定的1.5版本虚拟机,在整个类库build system当中使用这个选项已经几个月了,还没有发现过问题。

有意思的是Eclipse开发人员对这个选项的态度,在Eclipse 3.2M5及以前的版本里面,这个选项是可以在Eclipse IDE的Preference里面设置的。后来IBM英国的同事发信给Eclipse开发组询问在如果在ant中运行Eclipse编译器如何设置这个选项,结果得到的回复竟然是他们认为这是个bug, 他们将在3.2 RC1开始禁用这个设置(如下图所示)。在绝望的以为将长期使用Eclipse3.2 M5之前,我们发现这个"bug"修改的并不彻底,在项目的配置文件中修改是一样有效的:D, 尽管Harmony快要有1.5的虚拟机用了,但还是希望所有看到这个帖子的tx不要把这个bug报告给Eclipse团队,至少我觉得这还是挺有用的;-)。

想在Java 1.4的虚拟机中使用Generic?_第1张图片

你可能感兴趣的:(java,eclipse,虚拟机,ant,ide)