繁体   English   中英

问题-无法分配最终的局部变量od,因为它是用封闭类型定义的

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM