Я пытаюсь вставить Groovy в Java-приложение и получил странную проблему. Допустим, у меня есть этот класс, определенный в groovy script :
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 :).
В принципе, я понимаю, в чем может быть проблема, каждый раз, когда я компилирую скрипт, он создает новые экземпляры классов с разными идентификаторами, но одинаковыми именами, и они несовместимы друг с другом. Вопрос в том, как мне сделать то, что я пытаюсь сделать, без сериализации / десериализации всех общих объектов и без использования отражения?
Следует отметить, что я не могу переместить класс MyClass в код Java, он должен оставаться в сценарии, поскольку он является частью логики сценария.
Заранее спасибо.