Java 不同上下文中同一类的变量

Java 不同上下文中同一类的变量,java,groovy,embedding,Java,Groovy,Embedding,我试图在java应用程序中嵌入groovy,但遇到了一个奇怪的问题。假设我在groovy脚本中定义了这个类: class MyClass { String a; } 然后我实例化它并将其放入我的应用程序上下文范围(Map存储在我的主应用程序中,并在脚本之间提供公共存储) 然后,在另一个脚本中(使用自己的上下文单独运行,但来自相同的源,包括MyClass.groovy文件),我尝试读回变量: MyClass c = (MyClass) appContext.share.get("mycl

我试图在java应用程序中嵌入groovy,但遇到了一个奇怪的问题。假设我在groovy脚本中定义了这个类:

class MyClass {
    String a;
}
然后我实例化它并将其放入我的应用程序上下文范围(
Map
存储在我的主应用程序中,并在脚本之间提供公共存储)

然后,在另一个脚本中(使用自己的上下文单独运行,但来自相同的源,包括MyClass.groovy文件),我尝试读回变量:

MyClass c = (MyClass) appContext.share.get("myclass.instance")
还有一个惊人的异常,就是无法将MyClass实例强制转换为MyClass:)

基本上我理解可能出现的问题,每次编译脚本时,它都会创建具有不同ID但名称相同的类的新实例,并且它们彼此不兼容。问题是,在不序列化/反序列化所有共享对象和不使用反射的情况下,我如何做我正在尝试做的事情

必须注意的是,我不能将MyClass类移动到Java代码中,它必须保留在脚本中,因为它是脚本逻辑的一部分


提前感谢。

首先建议您使用Groovy的动态特性,避免在第二种情况下使用类型声明:

def c = appContext.share.get("myclass.instance")

但是,据我所知,在引擎盖下它将使用反射。

如果您尝试将
appContext.share.get(“myclass.instance”)转换为myclass,会怎么样<当
执行更“苛刻”的强制转换时,它甚至可以将映射强制转换为类。它类似于
c.properties=appContext.share.get(“myclass.instance”).properties

def c = appContext.share.get("myclass.instance")