【发布时间】:2011-11-27 18:23:52
【问题描述】:
我有兴趣使用 Java 7 SDK 中的一些 NIO2 功能(如果可用)(特别是 file system watchers),但是我不想为 Java 7 编译我的类并排除 Java 6 运行时。主要是因为我想保持与 Mac OS X 的兼容性,也因为我不想强迫我的用户升级。
这可能吗?最好的方法是什么?任何链接或示例?
以下是我可以想象的一些方法:使用不同的编译器编译类文件并根据 Java 版本动态加载它?或者也许使用反射?或者也许只是 Java 7 的编译器设置来生成与 Java 6 兼容的类?
我正在寻找一种不会变成丑陋的混乱的解决方案:),所以理想情况下我可以编写一个接口的两个实现,一个使用新功能,一个不使用,然后动态选择一个,而不必到处做反射调用。
【问题讨论】:
-
既然我认为这些功能在 SE7 中开始存在,您认为您将如何使用 SE6 兼容模式进行编译并保留它们?
-
我想做的只是当程序在 Java 7 运行时执行时才使用它们,如果没有,则回退到其他行为。请注意,我说的是 Java 7 SDK 功能,而不是语言功能。
-
抱歉,需要两个代码库(或者,至少,每个环境都有一个单独的文件处理库,并为每个版本创建单独的输出,因为在版本 X 中编译的代码通常不会在任何较低编号的版本中工作)
-
java 6 在 java 7 VM 上运行(但 AFAIK 不是相反)