问题
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
}
}
}
}
回答1:
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.
回答2:
First of all, you have to make it final
:
void display(final boolean hasTypedSomeToken)
Then you can refer to it simply as hasTypedSomeToken
:
if (hasTypedSomeToken) ...
回答3:
You need to declare it final
, like this void display(final boolean hasTypedSomeToken)
, and use it without prefixes: if(hasTypedSomeToken)
.
回答4:
Make the variable 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
}
}
});
}
}
来源:https://stackoverflow.com/questions/8536126/how-to-use-outer-methods-input-in-anonymous-inner-class