【发布时间】:2012-07-10 14:30:48
【问题描述】:
假设我有一个变量int x = 1,并且我在主线程中声明了一个runnable,并且我想将x 传递给runnable 的run() 方法,那么它必须声明为final。为什么?
final int x = 0;//<----must be final...
private class myRun implements Runnable {
@Override
public void run() {
x++;//
}
}
【问题讨论】:
-
因为这就是语言的定义方式。大概是为了防止变量在匿名内部类中的所述方法中被修改。 (我确实相信它也简化了实现:只有 values 需要被代理复制到匿名类型中,并且不再需要保留原始变量,这是完全闭包语义所要求的.)
-
如果不是这种情况,您的变量可能随时被修改而不会发出警告。
标签: java variables final runnable