-
a
ne peuvent être finalisés qu'ici. Pourquoi ? Comment puis-je réaffectera
suronClick()
sans le garder comme membre privé ?private void f(Button b, final int a){ b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int b = a*5; } }); }
-
Comment puis-je renvoyer le
5*a
quand ça a cliqué ? Je veux dire,private void f(Button b, final int a){ b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { int b = a*5; return b; // but return type is void } }); }
Réponses
Trop de publicités?La raison pour laquelle l'accès a été limité aux seules variables locales finales est que si toutes les variables locales étaient rendues accessibles, elles devraient d'abord être copiées dans une section séparée où les classes internes pourraient y avoir accès et le maintien de multiples copies de variables locales mutables pourrait conduire à des données incohérentes. Alors que les variables finales sont immuables et, par conséquent, le nombre de copies n'aura aucun impact sur la cohérence des données.
Les méthodes d'une classe interne anonomique peuvent être invoquées bien après la fin du thread qui l'a créée. Dans votre exemple, la classe interne sera invoquée sur le thread de répartition des événements et non dans le même thread que celui qui l'a créée. Par conséquent, la portée des variables sera différente. Ainsi, pour protéger ces problèmes de portée d'affectation de variables, vous devez les déclarer finales.
- Réponses précédentes
- Plus de réponses