我想在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()
的值并访问其数据?
答案 0 :(得分:0)
使用interface限制返回值。
如果返回值没有限制,则对其进行操作意味着您知道所有相关信息。那么你的'动态加载'是什么意思?
抽象一个普通的接口SomeInterface
,然后是
SomeInterface value = targetClass.cast(getValueMethod.invoke(null));
其他代码仅适用于SomeInterface
,但不需要知道实际情况。这是界面的力量。