我在Java应用程序中使用GroovyScriptEngine
从不同的源动态加载代码。我们说我有两个文件夹sources_A\
和sources_B\
。
GroovyScriptEngine engine = new GroovyScriptEngine(new String[]{
"sources_A", "sources_B"
});
在每个文件夹中,我都有Groovy包和类,我希望在运行时任意实例化。
问题:其中一些类在两个文件夹中都有相同的(完整)名称。
因此,当我跑步时存在歧义:
engine.loadScriptByName("some.package.SomeClass").newInstance()
当然,我可以创建两个不同的引擎:
GroovyScriptEngine engine_A = new GroovyScriptEngine(new String[]{"sources_A"});
GroovyScriptEngine engine_B = new GroovyScriptEngine(new String[]{"sources_B"});
但是当我从这两个不同引擎实例化的两个对象必须互相交互时,我遇到了问题:
object_from_A.someMethod(object_from_B);
错误:文件bar.groovy
中方法foo中第**行的参数类型不匹配
(不用说没有类型不匹配:对象具有正确的类型但由于引擎不同而无法识别)
简而言之,您是否有解决方案:
答案 0 :(得分:0)
Java(和Groovy)类加载器通过其完全限定名称标识类,并且只能加载一次。 所以,不,你不能加载2个同名的类(只加载一个)。