首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用相互冲突的名称加载groovy类

用相互冲突的名称加载groovy类
EN

Stack Overflow用户
提问于 2016-07-26 15:20:00
回答 1查看 186关注 0票数 0

我在我的Java应用程序中使用GroovyScriptEngine动态地从不同的源加载代码。假设我有两个文件夹,sources_A\sources_B\

代码语言:javascript
复制
GroovyScriptEngine engine = new GroovyScriptEngine(new String[]{
    "sources_A", "sources_B"
});

在每个文件夹中,我都有希望在运行时任意实例化的Groovy包和类。

问题:中的一些类在两个文件夹中都有相同的(全名)。

所以当我跑的时候有一种模糊:

代码语言:javascript
复制
engine.loadScriptByName("some.package.SomeClass").newInstance()

当然,我可以创建两个不同的引擎:

代码语言:javascript
复制
GroovyScriptEngine engine_A = new GroovyScriptEngine(new String[]{"sources_A"});
GroovyScriptEngine engine_B = new GroovyScriptEngine(new String[]{"sources_B"});

但是,当从这两个不同引擎实例化的两个对象必须相互交互时,我会遇到问题:

代码语言:javascript
复制
object_from_A.someMethod(object_from_B);

错误:文件bar.groovy中的foo方法中行**处的参数类型不匹配

(不用说,不存在类型不匹配:对象具有正确的类型,但由于引擎不同而无法识别)

简单地说,,您有解决方案吗?

  • 单引擎解决方案,以某种方式消除歧义,哪个源文件夹是使用的?
  • 两个引擎的解决方案,以某种方式让两个不同引擎的对象协同工作?
EN

回答 1

Stack Overflow用户

发布于 2016-07-26 15:55:50

Java (和Groovy)类加载器通过其完全限定的名称标识一个类,并且只能加载它一次。因此,不可以加载两个同名的类(只有一个将被加载)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38593866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档