有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java:如何导入类的旧版本

在我的安卓项目中,我必须包含一个来自库“L”的类文件“X”。一个依赖项项目也使用相同的库“L”,但版本较旧

现在我的问题是,当我包含“X”时,它总是导入最新版本的“L”。但在某些方面,我需要包括旧版本。如何做到这一点


共 (2) 个答案

  1. # 1 楼答案

    我同意你的评论和回答。库必须只有一个版本,建议使用最新版本。 通常情况下,库应该支持向后兼容(如果没有主要版本差异),并带有不推荐的警告注释。 如果同时添加这两个版本,则不能保证类加载器将选择哪个版本

    解决这个问题的一个非常有力的方法是手动实现多类加载器方法

    警告:只有当您与该库的关系更像是基于服务调用的方法时,这才有效

    1. 创建另一个项目,该项目依赖于旧jar用户库和旧jar
    2. 将所有从属JAR导出到不同的文件夹
    3. 在应用程序中,手动创建一个新的类加载器并加载该目录中的所有JAR
    4. 当时间到来时,切换到新的类加载器(覆盖当前线程的类加载器),然后通过反射调用所需的类创建/调用方法操作。包装器类将更容易
    5. 使用完成后,最后还原线程classloder,然后继续

    注意:不确定,但默认Java类加载器可能有父类&;子关系(OSGI classloders肯定有它)。 如果是这样,你就不需要把普通的罐子分开。当您的父项目加载它时,它也应该可以通过子类加载器访问。这就是如何将父类加载器创建的参数对象传递给子类加载器加载的对象方法

  2. # 2 楼答案

    您不应该在项目中使用具有相同包结构的相同类的两个不同版本

    因为类加载器会弄不清楚该加载哪一个
    不过,如果确实需要加载同一类的两个不同版本,请参考this