如何在Java中访问内部类中的非final变量号?

Kev*_*Lee 0 java android

这是我第一次用Java编程,所以我无法理解为什么我无法访问函数之外的变量.我试图将变量更改为final,但仍然存在错误:

无法分配最终的局部变量编号,因为它是在封闭类型中定义的

如果变量中没有final关键字,则错误如下:

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

这是我的代码:

        String[] number = this.nextNumber();
        Button submitbutton = (Button)findViewById(R.id.button1);
        submitbutton.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
                  // Perform action on clicks
                  //Toast.makeText(Addition.this, inp.getText(), Toast.LENGTH_SHORT).show();
                  if(inp.getText().toString().equals("")) {
                      Toast.makeText(Addition.this, "Please enter your answer", Toast.LENGTH_SHORT).show();
                  } else {
                      int answer = Integer.parseInt(inp.getText().toString());
                      if(Integer.parseInt(number[1]) == answer) {
                          Toast.makeText(Addition.this, "NICE!", Toast.LENGTH_SHORT).show();
                          int currentPoint = Integer.parseInt((String) points.getText());
                          currentPoint = currentPoint + 1;
                          points.setText(Integer.toString(currentPoint));
                          number = Addition.this.nextNumber(); // this part doesn't work. why?
                        } else {
                            Toast.makeText(Addition.this, "Wrong!", Toast.LENGTH_SHORT).show();
                      }
                  }
              }
          });
Run Code Online (Sandbox Code Playgroud)

我对不起作用的部分发表评论.请告诉我为什么

Jon*_*eet 5

那么,你遇到的两个规则就像编译器所说的那样:

  • 最终变量必须只分配一次 - 您以后不能更改其值
  • 如果它们是最终的,您只能从匿名内部类访问本地变量

目前尚不清楚你正在尝试做什么,或者为什么你试图从你的内部改变局部变量的值OnClickListener.这里的大局是什么?你可以在匿名内部类本身中声明一个变量,还是在你的类中使它成为一个实例变量?

如果您是Java新手,我强烈建议您编写更简单的代码.匿名内部类是相对先进的.

在开始Android开发之前,我实际上鼓励你在桌面上使用Java作为一种语言 - 在一个简单的控制台应用程序中使用核心库(集合,IO等)和任何有趣的语言,这将很容易启动和调试没有任何Android特定的复杂性妨碍你.