Как использовать вход внешнего метода в анонимном внутреннем классе?

Например, как я могу использовать входные данные hasTypedSomeToken в моем внутреннем классе Anonymou в следующем:

    public class Login {

        void display(boolean hasTypedSomeToken)
        {
           //some code here

               Button btnLogIn = new Button("Login", new ClickHandler() {

                @Override
                public void onClick(ClickEvent event) {

                    if(Login.this.hasTypedSomeToken) //HOW TO USE hasTypedSomeToken HERE 
                    {

                    //do something

                    }
                }
          }
      }

4 ответа

Решение

Переменные, объявленные в методе, являются локальными переменными. например hasTypedSomeToken а также btnLogIn локальные переменные в вашем display метод.

И если вы хотите использовать эти переменные внутри локального внутреннего класса (классы, которые определены внутри метода, например, анонимный класс, который реализует ClickHandler в вашем случае) тогда вы должны объявить их final,

например

void display(final boolean hasTypedSomeToken) {

Если вы посмотрите на Login.this.hasTypedSomeToken, this используется для доступа к переменным-членам. Локальные переменные не являются членами класса. Это автоматические переменные, которые живут только внутри метода.

Прежде всего, вы должны сделать это final:

void display(final boolean hasTypedSomeToken)

Тогда вы можете обратиться к нему просто как hasTypedSomeToken:

if (hasTypedSomeToken) ...

Вы должны объявить это final, как это void display(final boolean hasTypedSomeToken)и используйте его без префиксов: if(hasTypedSomeToken),

Сделать переменную final:

public class Login {

    void display(final boolean hasTypedSomeToken) {
        Button btnLogIn = new Button("Login", new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {

                if (hasTypedSomeToken) {
                    // frob a widget
                }
            }
        });
    }
}
Другие вопросы по тегам