Переменные доступа внешнего класса в Java
в приложении Java android, как я могу получить доступ к переменным внешнего класса из внутреннего анонимного класса?
Пример:
ProgressDialog dialog = new ProgressDialog(this);
.....
send.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
//here i'd like to do something with **dialog** variable
.......
}
});
Ответы
Ответ 1
Если переменная диалога является полем внешнего класса, вы можете использовать this
с префиксом внешнего имени класса (квалифицированный это):
send.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
ProgressDialog dlg = OuterClass.this.dialog;
.......
}
});
В качестве альтернативы, если переменная dialiog является локальной переменной, ее необходимо пометить как final:
final ProgressDialog dialog = new ProgressDialog(this);
.....
send.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
// The dialog variable is in scope here ...
dialog.someMethod();
}
});
Ответ 2
Сделайте внешнюю локальную переменную (dialog
) final
, чтобы вы могли ссылаться на нее из внутреннего класса.
Ответ 3
Если это локальная переменная (например, подсказка), она должна быть final
, чтобы внутренний класс мог получить к ней доступ. Если это переменная-член, модификатор видимости должен быть по умолчанию (без модификатора) или выше (защищен или открыт). С private
-modifier он все равно работает, но вы можете получить предупреждение (в зависимости от ваших настроек компилятора):
Чтение доступа к закрывающему полю SomeClass.someField эмулируется синтетический метод доступа