[英]Best practice for developing under multiple JDKs
我有一个正在开发的库,该库具有与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
您的Runtime6
类不会引用JDK8类,即使通过导入来传递也是如此。 这种方法的主要缺点是随着时间的流逝跟踪很少的花絮。
我认为您正在做的事情很有趣,并且我很好奇您选择如何完成它。 请随时通知我们!
我认为您可以使用系统属性( http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html )来发现使用了哪个Java版本,然后可以使应用程序适应运行因此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.