首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 6中使用Java 7 SDK功能

在Java 6中使用Java 7 SDK功能
EN

Stack Overflow用户
提问于 2011-09-29 22:24:39
回答 4查看 2.9K关注 0票数 9

我对使用Java7SDK中的一些NIO2特性(特别是file system watchers)很感兴趣,但是我不想为Java7编译我的类并排除Java6运行时。主要是因为我想保持与Mac的兼容性,也因为我不想强迫我的用户升级。

这个是可能的吗?做这件事最好的方法是什么?有什么链接或例子吗?

这里有一些我可以想象的方法:用不同的编译器编译一个类文件,然后基于Java版本动态加载它?或者使用反射?或者,可能只有Java 7的编译器设置可以生成与Java 6兼容的类?

我正在寻找一种不会变成丑陋的混乱的解决方案:),所以理想情况下,我可以编写接口的两个实现,一个使用新功能,另一个不使用新功能,然后动态选择一个,而不是到处进行反射调用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-30 07:47:39

只需使用-target 1.6构建并组织您的代码,这样您就可以在使用1.7的模块周围干净地捕获ClassNotFoundExceptions和NoClassDefFoundErrors。例如,可以使用单独的类加载器加载它们。

票数 9
EN

Stack Overflow用户

发布于 2011-09-29 22:44:02

正如工具包所指出的,你可以很容易地为java1.6构建。但是,您需要确保您不会意外地访问任何在java6中不存在的方法,这将在您的生产代码中导致运行时异常。

如果你使用的是maven,你可以使用maven-enforcer-plugin,它可以确保不会有java 1.7的类或方法调用潜入你为1.6构建的代码中。

一个例子就是从java 1.4到1.5的变化。我用1.5构建,目标是1.4,我意外地使用了:

代码语言:javascript
复制
new BigDecimal(5);

这段代码编译得很好,对我来说也运行得很好。但因为客户端仍在使用1.4,所以失败了。因为这个构造函数在1.4中不存在。它是在1.5中引入的。

另一种解决方案是构建两个jars,一个使用新的nio内容,另一个使用旧的内容,并在安装时检测用户是否正在运行java 1.7。如果是,则添加包含适当实现的jar。

票数 1
EN

Stack Overflow用户

发布于 2011-09-29 22:32:01

对于Java 7中添加的一些元素,您可能能够找到为您提供此功能的Java 6 jsr jars。然而,我不相信文件系统观察者会出现这种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7598789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档