Pourquoi ne les variables passées à exécutables doivent être définitive?

Si j'ai une variable int x = 1, dire, et je déclare un exécutable dans le thread principal, et je veux passer de x à l'exécutable du run() méthode, elle doit être déclarée final. Pourquoi?

final int x = 0;//<----must be final...
private class myRun implements Runnable {

    @Override
    public void run() {
        x++;//
    }

}
Parce que c'est la façon dont la langue est définie. Sans doute pour éviter le variables d'être modifié dans le cadre de cette méthode dans le anonyme intérieur de la classe. (Je crois qu'il simplifie également la mise en œuvre: seul le besoin de proxy être copié dans l'anonymat le type et l'origine des variables doivent plus être gardé, avec la fermeture complète de la sémantique.)
Si ce n'était pas le cas, les variables pourrait obtenir modifiées à tout moment et sans avertissement.

OriginalL'auteur | 2012-07-11