【发布时间】:2010-12-22 15:38:21
【问题描述】:
我正在尝试在 Java 应用程序中嵌入 groovy,但遇到了一个奇怪的问题。假设我在 groovy 脚本中定义了这个类:
class MyClass {
String a;
}
然后我将其实例化并将其放入我的应用程序上下文范围(Map<String, Object> 存储在我的主应用程序中并在脚本之间提供公共存储)。
MyClass c = new MyClass()
c.a = "Hello world!"
appContext.share.put("myclass.instance",c)
然后,在其他脚本中(单独运行,具有自己的上下文,但来自相同的来源,包括 MyClass.groovy 文件),我尝试读回变量:
MyClass c = (MyClass) appContext.share.get("myclass.instance")
并得到一个关于无法将 MyClass 实例转换为 MyClass 的壮观异常:)。
基本上我明白可能是什么问题,每次我编译脚本时,它都会创建具有不同 ID 但名称相同的类的新实例,并且它们彼此不兼容。问题是,如果不序列化/反序列化所有共享对象并且不使用反射,我该如何做我想做的事情?
需要注意的是,我不能将 MyClass 类移动到 Java 代码中,它必须保留在脚本中,因为它是脚本逻辑的一部分。
提前致谢。
【问题讨论】: