我在我的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方法中行**处的参数类型不匹配
(不用说,不存在类型不匹配:对象具有正确的类型,但由于引擎不同而无法识别)
简单地说,,,您有解决方案吗?
发布于 2016-07-26 15:55:50
Java (和Groovy)类加载器通过其完全限定的名称标识一个类,并且只能加载它一次。因此,不可以加载两个同名的类(只有一个将被加载)。
https://stackoverflow.com/questions/38593866
复制相似问题