变量范围
问题描述:
如何在此代码中获取方法参数“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?***
}
};
}
答
假设你只是想阅读它,你只需要使它最后:
public void myMethod(final int myInteger) {
View.OnClickListener myClearHandler = new View.OnClickListener() {
public void onClick(View v) {
int foo = myInteger;
}
};
}
在Java中,只有final
参数和局部变量可以匿名内部类中进行访问。
答
我猜测的语言应该支持*和所有你需要在这种情况下,做的是使用变量myInteger
在onClick
监听器,你应该罚款。这工作在精细很多语言我不当然了解Java。
public void myMethod(final int myInteger) {
View.OnClickListener myClearHandler = new View.OnClickListener() {
public void onClick(View v) {
int myInteger = myInteger * 100;
}
};
}
AS发布者John Skeet:最后的关键字在这里很重要。
答
You Cannot refer to a non-final variable myInteger inside an inner class
defined in a different method
你可能会得到这样的错误,所以,你必须将其声明为最终像这样
final int myInteger
哦确定我不力知道最后一部分..谢谢+1 – Baz1nga
谢谢你解决方案。怎么样给它分配一个值? – Gohary
@Gohary:你不能在Java中分配 - 闭包选项有一定限制。您*可以*使用包装类型 - 例如一个数组 - 并更改内部类中包装器的内容。在你的情况下这是否合适很难说。 –