如何在匿名内部类中使用外部方法的输入?



例如,我如何使用输入'hasTypedSomeToken'在我的匿名内部类在以下-

    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
                    }
                }
          }
      }

首先,您必须将其设置为final:

void display(final boolean hasTypedSomeToken)

那么您可以将其简称为hasTypedSomeToken:

if (hasTypedSomeToken) ...

方法中声明的变量是局部变量。例如,hasTypedSomeTokenbtnLogIndisplay方法中的局部变量。

如果你想在本地内部类(在方法中定义的类,例如在你的情况下实现ClickHandler的匿名类)中使用这些变量,那么你必须声明它们为final

void display(final boolean hasTypedSomeToken) {

如果你看Login.this.hasTypedSomeToken, this是用来访问成员变量的。局部变量不是类的成员。它们是只存在于方法中的自动变量。

您需要将其声明为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
                }
            }
        });
    }
}

最新更新