【问题标题】:"Cannot refer to a non-final variable buttonflag inside an inner class defined in a different method"“不能在不同方法中定义的内部类中引用非最终变量按钮标志”
【发布时间】:2012-04-26 18:26:52
【问题描述】:
boolean buttonflag=false;
        Editbutton.setOnClickListener( new OnClickListener()
        { 


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

             }
        }

我得到的错误是“不能引用以不同方法定义的内部类中的非最终变量 buttonflag”我想要做的是当我按下 Editbutton 时我希望 buttonflag 为真..任何人都可以解释这个问题的原因和解决方法?

【问题讨论】:

  • Java 不支持这个,除非你把它变成一个字段。
  • 为了了解这个原因,尝试通过这个answer of mine,希望能有所帮助

标签: java swing


【解决方案1】:

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

  1. 将按钮标记设为字段
  2. 最终确定。但是,你不能修改它,你必须选择一维数组的方法导致

    final boolean[] buttonflag=new boolean[]{false};
    Editbutton.setOnClickListener( new OnClickListener(){ 
       @Override
       public void onClick( View v ){
         buttonflag[0]=true;
       }
    }
    

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 2014-12-09
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多