Bonjour à tous,
alors voilà je pose la question suivante :
Pourquoi est-ce que les variables locales externes à l'instance de la classe anonyme doivent être finales ?

Je sais que ça garantit que la classe anonyme ne puisse pas modifier ces variables mais je ne comprends pas l'intérêt.

C'est encore pire pour le paramétre passé en appel de la méthode dans laquelle est définie ma classe anonyme. Je ne comprends pas à quoi ça sert qu'il soit final puisque de toute façon si on modifiait la valeur de ce paramétre dans la méthode, on ne ferait que modifier une copie du paramétre ...

Un exemple de code avec classe anonyme.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class WithAnonymousClass 
{
    int b=80;
 
    void method(final int a){
        final int r = a + 1 ;
        ForAnonymousClass t = new ForAnonymousClass()
        {
            int c = a;
            public void doStuff()
            {
                c++;
                b = r + 1;
                System.out.println("doStuff de ForAnonymousClass, valeur de b :" + b + " valeur de c : " + c);
            }
            public void doSomethingElse()
            {
                b ++ ;
                System.out.println("doSomethingElse de ForAnonymousClass");
            }
        } ; 
        t.doStuff();
        //t.doSomethingElse(); //inconnu car non défini dans l'interface, pourtant la méthode est public ...
        OtherClass other_class = new OtherClass()
        {
            int k = 7 ;
            public void doOtherStuff() 
            {
                super.doOtherStuff();
                System.out.print("doOtherStuff dans re définition de OtherClass"); 
            } ;
        };
        other_class.doOtherStuff() ;
    }
 
    public static void main(String[] args)
    {
        WithAnonymousClass b = new WithAnonymousClass();
        int param = 0;
        b.method(param);
    }
}