“不能引用在不同方法中定义的内部类中的非最终变量buttonflag”

时间:2012-04-26 18:26:52

标签: java swing

boolean buttonflag=false;
        Editbutton.setOnClickListener( new OnClickListener()
        { 


            @Override
            public void onClick( View v )
            {
               buttonflag=true;

             }
        }

错误我得到的是“不能引用在不同方法中定义的内部类中的非最终变量buttonflag”我想要做的是当我按下编辑按钮时我想要按钮标志是真的..可以任何一个解释原因并解决这个问题?

2 个答案:

答案 0 :(得分:3)

错误信息非常简单。由于buttonflag不是最终版,因此您无法在OnClickListener匿名类中访问它。两种可能的解决方案

  1. 将buttonflag设为字段
  2. 让它成为最终的。但是,你无法修改它,你必须选择导致

    的一维数组方法
    final boolean[] buttonflag=new boolean[]{false};
    Editbutton.setOnClickListener( new OnClickListener(){ 
       @Override
       public void onClick( View v ){
         buttonflag[0]=true;
       }
    }
    

答案 1 :(得分:1)

对于这种情况,您必须将其设为字段。另一个@Robin正确地向您展示了两种解决问题的方法,但是因为这是一个多次调用的回调机制(毕竟它是一个按钮上的回调),所以局部变量很少用,因为它会在调用方法之前可能超出范围。

即使它不会失败,因为设置的值不再可由代码的任何其他部分访问,因此它没有用处。我假设您在按下按钮时尝试设置一些状态,因此当包含所显示代码的方法结束时,该状态需要存储为可访问的字段。