Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中外部类的访问变量_Java_Local Variables_Anonymous Inner Class - Fatal编程技术网

Java中外部类的访问变量

Java中外部类的访问变量,java,local-variables,anonymous-inner-class,Java,Local Variables,Anonymous Inner Class,在Java android应用程序中,如何从内部匿名类访问外部类的变量? 例如: 如果对话框变量是外部类的字段,则可以使用前缀为外部类名称()的this: 或者,如果dialiog变量是局部变量,则需要将其标记为final: final ProgressDialog dialog = new ProgressDialog(this); ..... send.setOnClickListener(new View.OnClickListener() { public void onCli

在Java android应用程序中,如何从内部匿名类访问外部类的变量? 例如:


如果对话框变量是外部类的字段,则可以使用前缀为外部类名称()的
this

或者,如果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();
    }
});

使外部局部变量(
dialog
final
,以便可以从内部类引用它。

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

对封闭字段SomeClass.someField的读取访问由 综合存取器法


对话框
是外部类的字段时,这是正确的答案。我认为在这种情况下,它是内部类方法中的一个局部变量。我很高兴java支持这一点,所以我不必提出不同的奇怪名称。关于成员变量的部分是不正确的。内部类可以访问封闭类的私有成员——编译器为这些成员生成隐藏的访问器。
send.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v) {
       ProgressDialog dlg = OuterClass.this.dialog;
       .......
    }
});
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();
    }
});