我正在尝试将 groovy 嵌入到 java 应用程序中,但遇到了一个奇怪的问题。假设我在 groovy 脚本中定义了这个类:
class MyClass {
String a;
}
然后我实例化它并将其放入我的应用程序上下文范围( Map<String, Object>
存储在我的主应用程序中并在脚本之间提供公共(public)存储)。
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 代码,它必须保留在脚本中,因为它是脚本逻辑的一部分。
提前致谢。
最佳答案
如果您尝试将 appContext.share.get("myclass.instance") 强制转换为 MyClass
会怎样? as
执行更“严厉”的转换,它甚至可以将 Map 转换为类。就像c.properties = appContext.share.get("myclass.instance").properties
。
关于java - 不同上下文中同一类的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510774/