从JAR文件中的类中获取值

时间:2017-10-21 15:01:14

标签: java reflection classloader

我想在JAR中运行一个方法,该方法看起来像public static SomeType getValue()

我尝试使用反射,似乎没问题:

URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, Main.class.getClassLoader());
Class targetClass = classLoader.loadClass("some.package.TargetClass");
Class targetType = classLoader.loadClass("some.package.SomeType");
Method getValueMethod = targetClass.getMethod("getValue");

但是在获得这样的返回值时:

targetType value = targetClass.cast(getValueMethod.invoke(null));

value的类型不能是targetType,不是吗?但是,SomeType类型位于JAR文件中,因此我不能像SomeType value = ~~

那样

然后,如何正确获取getValue()的值并访问其数据?

1 个答案:

答案 0 :(得分:0)

使用interface限制返回值。

如果返回值没有限制,则对其进行操作意味着您知道所有相关信息。那么你的'动态加载'是什么意思?

抽象一个普通的接口SomeInterface,然后是

SomeInterface value = targetClass.cast(getValueMethod.invoke(null));

其他代码仅适用于SomeInterface,但不需要知道实际情况。这是界面的力量。