Как получить доступ к переменным суперкласса переданного класса в Groovy Script Engine? - PullRequest
0 голосов
/ 12 марта 2012

Я динамически запускаю отличные скрипты из scala. И есть некоторые экземпляры некоторых классов, передаваемых в groovy-скрипты через setProperty (). Например, допустим, у вас есть класс с именем 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, но я не хочу этого делать.

Есть ли в любом случае доступ к переменным TestA без использования setter / getter? как использовать Expando или что-то?

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Поскольку вы не хотите писать геттеры / сеттеры самостоятельно (что было бы ужасно в Scala), вы можете просто добавить scala.reflect.BeanProperty аннотацию (или scala. refle.BooleanBeanProperty ) для любых полей, к которым вы хотите получить доступ с другого языка JVM. Это даст вам более доступный API.

@scala.reflect.BeanProperty // generates getStatus() and setStatus() methods
var status = ""
0 голосов
/ 13 марта 2012

На самом деле, подумав об этом, вы можете просто получить доступ к методам доступа, которые Scala генерирует для себя.Вы можете получить доступ к методам доступа Scala из Groovy, но доступ к установщику variable_$eq может показаться немного странным.

...