Java 变量的作用域

Java 变量的作用域,java,android,variables,scope,Java,Android,Variables,Scope,如何在这段代码中获取方法参数“myInteger”的值 public void myMethod(int myInteger) { View.OnClickListener myClearHandler = new View.OnClickListener() { public void onClick(View v) { //***How can I get the value of "myInteger" here?*** }

如何在这段代码中获取方法参数“myInteger”的值

public void myMethod(int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
            //***How can I get the value of "myInteger" here?***
        }
    };
}

我猜这种语言应该支持闭包,在这种情况下,您只需在
onClick
侦听器中使用变量
myInteger
,就可以了。。这在许多语言中都能很好地工作,但我对Java不太清楚

public void myMethod(final int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
          int myInteger = myInteger * 100;
        }
    };
}

正如John Skeet所发布的:这里的final关键字很重要。

假设您只是试图阅读它,您只需要将其设置为final:

public void myMethod(final int myInteger) {
    View.OnClickListener myClearHandler = new View.OnClickListener() {
        public void onClick(View v) {
            int foo = myInteger;
        }
    };
}
在Java中,匿名内部类中只能访问
final
参数和局部变量

You Cannot refer to a non-final variable myInteger inside an inner class 
defined in a different method
您可能会遇到此错误,因此必须像这样将其声明为final

final int myInteger

谢谢你的解决方案。给它赋值怎么样?@Gohary:你不能在Java中赋值-闭包选项有点有限。您可以使用包装器类型(例如数组),并在内部类中更改包装器的内容。这对你来说是否合适很难说。