javaanonymous-inner-classouter-classes

How to use Outer Method's input in Anonymous Inner Class?


For Instance how can I use the input 'hasTypedSomeToken' in my Anonymou inner class in the following -

    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

                    }
                }
          }
      }

Solution

  • The variables declared within a method are local variables. e.g. hasTypedSomeToken and btnLogIn are local variables in your display method.

    And if you want to use those variables inside a local inner class (classes that are defined inside a method e.g. the anonymous class that implements ClickHandler in your case) then you have to declare them final.

    e.g.

    void display(final boolean hasTypedSomeToken) {
    

    If you look at Login.this.hasTypedSomeToken, this is used to access member variables. Local variables are not members of class. They are automatic variables that live only within the method.