我正在从scala动态运行groovy脚本 . 并且有一些类通过setProperty()传递给groovy脚本的实例 . 例如,假设您有一个名为TestA的类,而TestB类继承了TestA类 . 你正在将类B的实例传递给这样的groovy脚本
setProperty("testB", testB) // testB is an instance of class TestB
并运行groovy脚本,我可以访问在TestB中声明的变量 . 但是当我尝试访问TestA的变量时,它是TestB的超类,groovy给出了一个错误,上面写着“没有类的属性” .
我仍然可以从给定的实例中调用TestA和TestB的方法 . 所以,如果你只是编写setter和getter,我可以访问TestA的变量,但我不想这样做 .
无论如何在不使用setter / getter的情况下访问TestA的变量?喜欢使用Expando还是什么?
2 回答
由于您不想自己编写getter / setter(这在Scala中是丑陋的样板),您只需将scala.reflect.BeanProperty注释(或scala.reflect.BooleanBeanProperty)添加到您要从另一种JVM语言访问的任何字段 . 这将为您提供更易于访问的API .
实际上,在更多地考虑之后,您可以简单地访问Scala为自己生成的访问器方法 . 您可以从Groovy访问Scala的访问器方法,但访问setter
variable_$eq
可能看起来有点奇怪 .