Как использовать вход внешнего метода в анонимном внутреннем классе?
Например, как я могу использовать входные данные 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
}
}
});
}
}