2014-10-26 2 views
0

У меня есть следующий класс:Как получить доступ к переменным экземпляра в Groovy?

class MyTask extends DefaultTask { 
    private String param; 

    void setParam(String param) { 
     this.param = param; 
    } 

    @TaskAction 
    void action() { 
     if (param == "test") { 
      println "OK" 
     } 
    } 
} 

Он отлично работает, но если я ставлю точку останова на if в IntelliJ IDEA я не могу получить доступ к значению param:

  • Переменные просмотра показывает this, и если я его разворачиваю, я вижу param.
  • Если я делаю Выполнить> Вычислить выражение ... и введите this Я вижу то же самое.
  • НО если я тип this.param в окне выражения:

Не удается получить значение свойства только для записи «пары» на MyTask.

Как я могу работать вокруг решения param быть частной переменной экземпляра, а не «Automagic Groovy собственность»? Есть ли еще волшебная переменная для this?

Изменение кода и добавление getParam() - это не вариант!

Пытается

На основании предложения [email protected]:

Нет такого поля: пары для класса: MyTask_Decorated

Я также попытался this.class.superclass.getDeclaredField("param").get(this):

java.lang .IllegalAccessException: класс java_lang_reflect_Field $ get не могут получить доступ к члену класса MyTask с модификаторами «private»

+0

'this. @ Param' должен работать – cfrick

+0

@cfrick см. Обновление, другие идеи? Похоже, проблема вызвана '_Decorated' thingy. – TWiStErRob

+0

, и в окне 'Variables' нет абсолютно ничего, что привело бы вас к фактической стоимости? – cfrick

ответ

2

Здесь не используется автомагистральное свойство Groovy. Я не знаю, как в Groovy получить доступ к частной переменной, объявленной в суперклассе (Gradle будет подкласса MyTask во время выполнения), и звучит так, как если бы оценка выражения отладчика имела такое же ограничение.

+0

Да, это то же самое, что я сделал, так что это больше похоже на ошибку IDEA Groovy, поскольку пиратство частного в отладчике работает на Java, насколько я помню. – TWiStErRob

+0

Как вы видите, я тоже искал отражение, которое не работает (так же, как Java), за исключением 'setAccessible (true)' (например, Java); поэтому отладчик должен иметь способ играть. – TWiStErRob

+0

Я бы не счел это ошибкой, но, возможно, зарегистрировал запрос функции. Когда вы пришли к такому же выводу, примите мой ответ. –

Смежные вопросы