gpt4 book ai didi

java - 比较不同 jar 中公共(public)类的值

转载 作者:行者123 更新时间:2023-12-01 12:40:47 24 4
gpt4 key购买 nike

我有两个 java jar 应用程序。有一个名为 CommonClass 的类,它包含一个枚举:

public class CommonClass {

public enum myEnum {

NAME(0), TYPE(1), DESCRIPTION(2), OPTIONAL(3);
private int value;

private myEnum(int value) {
this.value = value;
}

public int getValue() {
return this.value;
}
}

}

第一个 jar 有这个类 (first.jar.CommonClass) ,第二个 jar 在某处有它(any.package.CommonClass)。

在运行第一个应用程序时,我想在某个时候比较 myEnum 值。我可以通过解析 list 从第二个应用程序类加载主类的实例,这样我就可以找到主类名称。

理论上,我想做:

if( any.package.CommonClass.myEnum.NAME.getValue() == first.jar.CommonClass.myEnum.NAME.getValue() ) {
// Do something
}

我怎样才能做到这一点?

<小时/>

编辑1

事情是:第一个应用程序是某种应该读取未知插件的平台。这些插件应该按照一些兼容性约定来开发。然而,没有办法知道插件开发人员想要将 CommonClass 放在哪个包中。

第二个应用程序就是这样一个插件。为了找到并加载它的主类,我解析了 list 。在实践中我不知道 CommonClass 的路径。

这就是为什么我无法导入任何包,因为首先我不知道将使用哪个插件,其次我对 jar 文件中 CommonClass 的位置知之甚少。

最佳答案

最简单的方法是将两个 jar 都包含在类路径中,并仅使用您在问题中发布的代码。

如果由于某些原因,这不是一个选项,因此该类型在编译时不可用,您将需要反射。但是,您不需要解析 list ,也不需要从 jar 文件加载主类,只是为了从 jar 中访问 enum 类。您可以通过用于加载第二个主类的相同 ClassLoader 来访问 enum 类,从而跳过主类的加载:

ClassLoader loader; // the loader you have used for your second jar’s main class
Class<?> second=loader.loadClass(typeName);
assert second.isEnum();
Object enumConst=Enum.valueOf(second, "NAME");
int value=(Integer)second.getMethod("getValue").invoke(enumConst);

关于java - 比较不同 jar 中公共(public)类的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116466/

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