变量范围

问题描述:

如何在此代码中获取方法参数“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参数和局部变量可以匿名内部类中进行访问。

+0

哦确定我不力知道最后一部分..谢谢+1 – Baz1nga

+0

谢谢你解决方案。怎么样给它分配一个值? – Gohary

+2

@Gohary:你不能在Java中分配 - 闭包选项有一定限制。您*可以*使用包装类型 - 例如一个数组 - 并更改内部类中包装器的内容。在你的情况下这是否合适很难说。 –

我猜测的语言应该支持*和所有你需要在这种情况下,做的是使用变量myIntegeronClick监听器,你应该罚款。这工作在精细很多语言我不当然了解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