在Java中访问外部类的变量

时间:2012-03-03 09:47:00

标签: java local-variables anonymous-inner-class

在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
           .......

        }
    });

3 个答案:

答案 0 :(得分:23)

如果对话框变量是外部类的字段,则可以使用前缀为外部类名a qualified this)的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();
    }
});

答案 1 :(得分:5)

创建外部局部变量(dialogfinal,以便您可以从内部类中引用它。

答案 2 :(得分:1)

如果它是局部变量(如签名所示),则内部类需要final才能访问它。如果它是成员变量,则可见性修饰符必须是默认值(无修饰符)或更高(受保护或公共)。使用private - 修饰符,它仍然有效,但您可能会收到警告(取决于您的编译器设置):

  

对封闭字段的读访问权SomeClass.someField由a模拟   合成访问方法