当前位置: 首页 > 知识库问答 >
问题:

变量在内部类中访问,需要声明为最终变量

易宏阔
2023-03-14

我正在尝试让一个按钮将其值与其他变量进行比较。在onClick方法中,我收到一个错误,说变量在内部类中被访问,需要声明为最终变量。问题是变量应该被更改,所以我无法使其成为最终变量。我如何解决这个问题?这是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GameActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);    

        int partA = 9;
        int partB = 9;
        int correctAnswer = partA * partB;
        int wrongAnswer1 = correctAnswer++;
        int wrongAnswer2 = correctAnswer--;

        TextView textObjectA = (TextView)findViewById(R.id.textPartA);
        TextView textObjectB = (TextView)findViewById(R.id.textPartB);

        Button buttonObjectChoice1 = (Button)findViewById(R.id.buttonChoice1);
        Button buttonObjectChoice2 = (Button)findViewById(R.id.buttonChoice2);
        Button buttonObjectChoice3 = (Button)findViewById(R.id.buttonChoice3);


        buttonObjectChoice1.setText("" + correctAnswer);
        buttonObjectChoice2.setText("" + wrongAnswer1);
        buttonObjectChoice3.setText("" + wrongAnswer2);    

        buttonObjectChoice1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int answerGiven = Integer.parseInt("" + buttonObjectChoice1.getText());

                if(correctAnswer==answerGiven)  {

                }
            }
        });
        buttonObjectChoice1.setOnClickListener(this);
        buttonObjectChoice1.setOnClickListener(this);


    }

    public void onClick(View view)  {}

}

共有2个答案

空翼
2023-03-14

尝试将变量声明为类的私有字段,并在方法中相应地更新它。

袁弘方
2023-03-14

两种方法:

>

  • 使按钮ObjectChoice1最终

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        final Button buttonObjectChoice1 =(Button)findViewById(R.id.buttonChoice1);
        ...
        buttonObjectChoice1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
               int answerGiven = Integer.parseInt("" + buttonObjectChoice1.getText());
    
                ...
            }
        });
    }
    

    在运行时转换视图:

    buttonObjectChoice1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Button btn = (Button)v;
    
            int answerGiven = Integer.parseInt("" + btn.getText());
    
            ...
         }
    });
    

    方法2的优点是,生成访问buttonObjectChoice1对象的访问器方法将减少编译器的工作量。

  •  类似资料:
    • 我知道这个话题听起来像是重复的,但我并不是想在这里调试这个问题,而是想绕过它。 我的程序应该做的是:对于文件夹中的每个文件,创建一个新按钮。如果您单击此按钮,请输入您刚输入的文件夹的名称。 现在我遇到的问题是,“fileName”变量需要放在final中,因为Java提供的是对象的指针,而不是值本身。但如果我这样做,则只会为任何按钮发送最后选择的文件名。

    • 我的代码有上述错误。我尝试通过将我的btnsav声明为最终版本来修复此问题,但随后我收到另外两个错误: 未知类:“btnsave” 不是一个声明 你知道我如何修复这个错误吗?

    • 问题内容: 尝试在内部类内部使用一个类的本地成员时遇到此错误。我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它,因为我将Intellij与Java 8一起使用,但它仍然无法编译。还有其他方法可以在不将其声明为final的情况下进行修复吗?谢谢。 问题答案: 我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它。 如果变量 有效地为final ,则Ja

    • 我在中发现了一个编译错误。 代码是这样的。

    • 变量“适配器”和声明最终的问题。我的IDE一直在告诉“适配器”需要声明为最终,我在哪里以及如何做到这一点?这让我陷入停顿,我似乎无法继续前进。请帮助。它在这里参考了这段代码和问题:来自ListView的Android ImageView

    • 问题内容: 因此标题说明了一切。我的内出现编译错误。 这是代码。 问题答案: 如果您不想使其最终确定,则始终可以将其设为全局变量。