當編譯下面的代碼,我得到了編譯錯誤:錯誤:從內部類訪問局部變量;需要聲明的最終
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'?
http://stackoverflow.com/questions/4732544/why-only-final-variables-accessible-in-anonymous-class – 2015-03-02 07:20:08
*是否有任何其他修復程序未在方法參數中添加'final'?* - 否。將它聲明爲最終的問題是什麼*?它仍然是*可變的*。 – TheLostMind 2015-03-02 07:20:50
@TheLostMind:那麼,參數本身不會變化--OP將無法更改其值。但它仍然會引用一個可變對象。 – 2015-03-02 07:23:56