错误:从内部类中访问局部变量;需要宣布最终

时间:2015-03-02 07:18:56

标签: java

编译以下代码时,出现编译错误:

MadScientist.java:27: Error: local variable timeTraveler is accessed from within inner class; needs to be declared final

import java.util.*;

interface TimeTravelCallback {
    void leaped(int amount);
}
interface TimeTraveler {
    void adjust(int amount);
}
class LinearTimeTraveler implements TimeTraveler {
    @Override public void adjust(int amount) {

    }
}

public class MadScientist {

    public static void main(String[] args) {

    MadScientist madScientist = new MadScientist();
    TimeTraveler linearTimeTraveler = new LinearTimeTraveler();
    madScientist.experiment(linearTimeTraveler);
    }

    public void experiment(TimeTraveler timeTraveler) {
        TimeTravelCallback cb = new TimeTravelCallback() {
            @Override public void leaped(int amount) {
                timeTraveler.adjust(amount); //error message
            }
        };
        cb.leaped(20);
    }
}

如果我改变

public void experiment(TimeTraveler timeTraveler) {

public void experiment(final TimeTraveler timeTraveler) {

然后它的工作原理。

如果没有添加' final'还有其他任何修复吗?在方法参数?

2 个答案:

答案 0 :(得分:0)

如果您想对传递给您的方法的final变量执行任何操作,请使用List之类的任何集合API。

public void experiment(final List<TimeTraveler> timeTraveler) {

 }

现在,您可以修改列表中的值。

答案 1 :(得分:0)

如果您不想添加final,则应在内部类TimeTravelCallback中创建构造函数,并将timeTraveler对象传递给此构造函数:

    TimeTravelCallback cb = new TimeTravelCallback(timeTraveler) {
       public TimeTravelCallback(TimeTraveler timeTraveler){
          this.timeTraveler = timeTraveler;
       } 
        @Override public void leaped(int amount) {
            timeTraveler.adjust(amount); //error message
        }
    };