这是针对Android应用程序的,但是由于我不知道通常是如何实现的,因此我将问题扩展到Java。

假设您有一个针对特定SDK版本的项目。新版本的SDK向后不兼容,并且需要在一个类中更改三行。

在Java中如何在不重复任何代码(或不重复最少代码)的情况下进行管理?
我不想只为3条不同的线创建两个项目。

我最终想要实现的是一个可以在两个版本上都可以使用的可执行文件。在C/C++中,您将根据版本获得一个#define。如何在Java中实现同一目标?

编辑:阅读有关#define的评论后,我意识到有两个要合并的问题:

  • 所以第一个问题是,我怎么不
    重复的代码?那里的构造等同于
    C.
  • 中的#define
  • 第二个是:是否可能
    将所有东西 bundle 在一起
    可执行文件? (这少了一个
    关注作为第一个)。
  • 最佳答案

    这在很大程度上取决于不兼容。如果仅是行为,则可以检查java.version系统属性并相应地分支代码(对于三行代码,就像if语句一样简单)。

    但是,如果缺少类或类似的东西而在加载类时或代码更接近执行时会引发错误(不一定是可以在调用前通过检查合理地作废的东西),那么解决方案将好多了从代码的角度来看,拥有单独版本的概念是最干净的,但这确实意味着您必须分发两个版本。

    另一个解决方案是反射。不要直接引用该类,而是通过反射调用它(测试方法或类以确定您当前在哪个环境中运行并执行这些方法)。这可能是反射(reflect)存在的“官方”方法,以处理您在编译时没有或不知道将要拥有的类。它仅适用于JDK中的库。但是,它变得非常难看非常快。对于三行代码,这是可以的,但是做任何大范围的事情都会变得很糟糕。

    我能想到的最后一件事是编写共同的分母代码-即可以同时完成这两项工作的代码,找到另一种方法来完成,而不会触发有问题的类或方法。

    关于java - 如何为不同的SDK目标管理同一类文件的多个版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1681200/

    10-12 00:10
    查看更多