[英]Java: the final local variable cannot be assigned, since it was defined in an enclosing type
[英]Issue - The final local variable od cannot be assigned, since it is defined in an enclosing type
当我尝试在方法内部或大括号中声明变量(例如int),然后稍后想在大括号之外更改变量的值时,它似乎不起作用。我做错了什么我是Java的新手,如果这是一个非常基本的问题,对不起。
Timer t = new Timer();
t.schedule(new TimerTask(){
public void run(){
double od = 0.5;
}
},30000);}
我想稍后在大括号外更改od的值,该怎么办?
您代码中的变量od
是局部变量。 从本质上讲,它不能从课堂之外进行更改。
有几种方法可以达到所需的效果。 一种是使用命名类和od
变量的setter替换您定义的匿名类(即花括号中的一个)。
class MyTimerTask extends TimerTask {
private double od = 0.5;
public void run(){
System.out.println(od);
}
public double getOd() {return od;}
public void setOd(double val) {od = val;}
}
...
MyTimerTask task = new MyTimerTask();
t.schedule(task, 30000);
...
// At this point you can change od
task.setOd(2.3);
变量仅在声明的范围内可用。 在您的情况下,作用域位于run()
方法内部。 如果您希望它在外部可用-应该在外部声明它。
public static void main(String[] args) {
final MyObj obj = new MyObj();
Timer t = new Timer();
t.schedule(new TimerTask(){
public void run(){
obj.set(0.5);
}
},500);
System.out.println(obj.get());
}
private static class MyObj {
private double od;
public void set(double val) {
od = val;
}
public double get() {
return od;
}
}
备注:
一个好的经验法则是在较小的(最具体的)范围内声明变量,以帮助GC处理未使用的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.