Java Scope来自C ++背景的问题

时间:2015-07-08 08:46:15

标签: java android scope

我正在开发我的第一个来自学校2年C ++的Android应用程序。

代码如下所示:

double total = 100000000000L;
for(long i = 0L; i < diff; i++) {
    total += 1.8;
}
countView.setText(NumberFormat.getInstance().format(total));

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
     @Override
     public void run() {

         if (total += 1.8 < 200000000000L) {
            handler.postDelayed(this, 1000L);
            return;
         }

         handler.removeCallbacks(this);
     }
 }, 1000L);

在C ++中,我能够重用总变量没有问题 - 它在同一范围内。但在Java中,我收到一条错误消息,我正在尝试访问内部类。试图将total声明为public或static会产生错误,即此处不允许使用修饰符。

为什么我可以在我声明的地方使用总数,但不能使用几行?

2 个答案:

答案 0 :(得分:1)

在Java中,如果要从示例中的total等本地类访问封闭类的成员(即示例中的Runnable),则必须将这些成员声明为{ {1}}。

https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html

对于您的代码,而不是final,重写代码(如果可以),以便double total成为整数并使用total。如果你不能改写,我会调查AtomicDouble alternatives

答案 1 :(得分:0)

如果total是一个调用处理程序的类字段,它应该没有任何问题。如果在调用处理程序的函数内声明它,请尝试将其声明为“final”。唯一的问题是,通过将其声明为final,您将无法修改它的值,就像在run()方法中那样。