[英]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.