gpt4 book ai didi

java - 在多个 JDK 下进行开发的最佳实践

转载 作者:行者123 更新时间:2023-11-30 04:20:09 24 4
gpt4 key购买 nike

我目前正在开发一个与 JDK 6 目标兼容的库。我喜欢利用 Java 8 功能,例如 lambda。代码和 API 将从 Java 8 中获益匪浅。

我想提供适用于 Java 6 和 Java 8 的库版本,例如,某些部分仅在 Java 8 版本中可用。

现在有一些核心类可能具有不同的源版本(旧版 Java 6 版本和新 Java 8 版本)。

这样做的最佳实践是什么?在 Objective-C 或 C++ 中,我会考虑使用预处理器指令。

最佳答案

我看到几个选项:

  1. 打包不同版本的库,一种用于 JDK6,一种用于 JDK8。用户有责任为其应用程序添加正确的选项。这将是一个有趣的构建。如果你使用 Maven,我想你只会使用 3 个项目;一个包含所有公共(public)类的“commons”项目,一个将commons项目作为依赖项并构建JDK6 jar的“JDK6”项目,然后是一个将commons项目作为依赖项并构建JDK8 jar的“JDK8”项目。这种方法的一个吸引人之处在于它显然有效,而且您无需进行艰苦的维护。
  2. 将 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();
    }

    使用这种方法,您只需要使用反射来加载初始“运行时”对象,然后您可以使用 native Java 来处理其他所有事情。例如:

     Framework framework=Runtime.getInstance().getFramework();
    ModelObject1 m=framework.newModelObject1();
    // ...

    请确保您的 Runtime6 类不引用 JDK8 类,即使通过导入传递也是如此。这种方法的主要缺点是随着时间的推移跟踪这个小花絮。

我认为你正在做的事情很有趣,我很好奇你选择如何完成它。请随时通知我们!

关于java - 在多个 JDK 下进行开发的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17252454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com