область видимости переменной - PullRequest
2 голосов
/ 25 сентября 2011

Как я могу получить значение параметра метода "myInteger" в этом коде.

public void myMethod(int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
            //***How can I get the value of "myInteger" here?***
        }
    };
}

Ответы [ 3 ]

11 голосов
/ 25 сентября 2011

Предполагая, что вы просто пытаетесь прочитать это, вам просто нужно сделать его окончательным:

public void myMethod(final int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
            int foo = myInteger;
        }
    };
}

В Java только анонимные внутренние классы могут иметь доступ к final параметрам и локальным переменным.

3 голосов
/ 25 сентября 2011

Я предполагаю, что язык должен поддерживать замыкания, и все, что вам нужно сделать в этом случае, это использовать переменную myInteger в вашем onClick слушателе, и у вас все должно быть в порядке. Это хорошо работает во многих языках. Я нехотя в Java я уверен.

public void myMethod(final int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
          int myInteger = myInteger * 100;
        }
    };
}

AS опубликовано Джоном Скитом: последнее ключевое слово здесь важно.

1 голос
/ 25 сентября 2011
You Cannot refer to a non-final variable myInteger inside an inner class 
defined in a different method

Возможно, вы получаете эту ошибку, поэтому для этого вы должны объявить ее как окончательную, как это

final int myInteger
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...