我目前正在开发一个与JDK 6兼容的库,我喜欢利用Java 8的特性,比如lambdas。代码和API将从Java 8中获益良多。
我想为Java 6和Java 8提供库的版本,例如,其中某个部分仅在Java 8版本中可用。
现在有一些核心类可能具有不同的源代码版本(旧的Java6版本和新的Java8版本)。
这样做的最佳实践是什么?在Objective-C或C++中,我会考虑使用预处理器指令。
发布于 2013-06-23 00:11:32
我看到了几个选项:
公共抽象类运行时{私有静态运行时实例;公共静态运行时getInstance() {if(实例实例为空){ try { if(System.getProperty("java.version").startsWith("8")) == = Class.forName("com.yourcompany.libname.runtime.Runtime8").newInstance();else实例= Class.forName("com.yourcompany.libname.runtime.Runtime6").newInstance();}捕获(异常e) {抛出新的RuntimeException(“无法创建运行时”,e);}}返回实例;}公共抽象框架getFramework();}
使用这种方法,您只需要使用反射来加载初始的"Runtime“对象,然后您就可以使用本机Java来处理其他所有事情。例如:
Framework framework=Runtime.getInstance().getFramework();ModelObject1 m=framework.newModelObject1();// ...
只需确保您的Runtime6类没有引用JDK8类,即使是通过导入传递的。这种方法的主要缺点是随着时间的推移跟踪这些小花边新闻。
我认为你正在做的事情很有趣,我很想知道你是如何选择去完成它的。
发布于 2013-06-22 23:50:15
我认为您可以使用系统属性(http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)来发现当前使用的是哪个Java版本,然后您可以相应地调整您的应用程序以使其运行。
https://stackoverflow.com/questions/17252454
复制相似问题