我有我目前到JDK 6,我喜欢利用Java 8的功能,像lambda表达式目标兼容性开发库。 该代码和API将极大地从Java 8中获利。
我想提供的库版本的Java 6和Java 8,例如,在某一部分只提供了Java版本8。
现在有可能有自己不同的源版本(遗留的Java 6版和新的Java版本8)一些核心类。
什么是这样做的最佳做法? 在Objective-C或C ++我会考虑使用预处理指令。
我有我目前到JDK 6,我喜欢利用Java 8的功能,像lambda表达式目标兼容性开发库。 该代码和API将极大地从Java 8中获利。
我想提供的库版本的Java 6和Java 8,例如,在某一部分只提供了Java版本8。
现在有可能有自己不同的源版本(遗留的Java 6版和新的Java版本8)一些核心类。
什么是这样做的最佳做法? 在Objective-C或C ++我会考虑使用预处理指令。
我看到一对夫妇的选择:
套餐无论是JDK6和JDK8版本在同一个JAR,并创建一个“运行”型类是负责在依赖于它在运行JDK运行时创建库的对象的正确版本,例如:
public abstract class Runtime { private static Runtime instance; public static Runtime getInstance() { if(instance == null) { try { if(System.getProperty("java.version").startsWith("8")) instance = Class.forName("com.yourcompany.libname.runtime.Runtime8").newInstance(); else instance = Class.forName("com.yourcompany.libname.runtime.Runtime6").newInstance(); } catch(Exception e) { throw new RuntimeException("Could not create runtime", e); } } return instance; } public abstract Framework getFramework(); }
使用这种方法,你只需要使用反射来加载初始的“运行”对象,然后你可以使用本地Java的一切。 例如:
Framework framework=Runtime.getInstance().getFramework(); ModelObject1 m=framework.newModelObject1(); // ...
要确保你的Runtime6
类不通过进口指JDK8类,甚至是及物动词。 这种方法的主要缺点是跟踪那个小珍闻随着时间的推移。
我想,你在做什么有趣的是,我很好奇,想听到你的选择如何完成它。 请随时通知我们!
我想你可以使用系统属性( http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html以发现其中的Java版本beind使用),然后你可以调整你的应用程序运行因此。