无法设置为final,无法初始化变量

时间:2014-02-08 04:59:33

标签: android global-variables

所以这让我有点疯狂。我想要做的就是将一个变量设置为一个字符

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

所以我真的不确定该怎么做。

2 个答案:

答案 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

因此在onCreateActivity内的String optr之前声明它。

答案 1 :(得分:1)

  

您收到此错误,因为optr被声明为局部变量而不是实例

     

不能引用在不同方法中定义的内部类中的非final变量optr

     

再次声明局部变量为final时,您可以从匿名类访问该变量,但它是最终的,因此您无法更改optr的值