所以这让我有点疯狂。我想要做的就是将一个变量设置为一个字符
String optr = "+";
Add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
optr = "+"; // Here I am trying to initilize and I get errors
}
});
但是我收到了诸如
之类的错误Cannot refer to a non-final variable optr inside an inner class defined in a different method
当我将变量设置为final时,我得到另一个错误
The final local variable optr cannot be assigned, since it is defined in an enclosing type
所以我真的不确定该怎么做。
答案 0 :(得分:1)
它必须是最终的bcoz你在内部类中使用它。
http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#accessing
匿名类无法访问其封闭的局部变量 未被宣布为最终或有效最终的范围。
您可以将其声明为实例变量,或者需要将其声明为final
。如果你把它作为最终它是k但你在内部类中再次重新分配它,因此你得到了
The final local variable optr cannot be assigned, since it is defined in an enclosing type
http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.3
因此在onCreate
类Activity
内的String optr
之前声明它。
答案 1 :(得分:1)
您收到此错误,因为optr被声明为局部变量而不是实例
不能引用在不同方法中定义的内部类中的非final变量optr
再次声明局部变量为final时,您可以从匿名类访问该变量,但它是最终的,因此您无法更改optr的值