Si j'avais cette méthode anonyme, je devrais déclarer x variable comme finale.Pourquoi les variables doivent être finales dans les méthodes anonymes et les champs de classe ne le font pas
private void testMethod (ListField<BeanModel> listField){
final ListLoader<BeanModel> loader = new PagedListLoader<BeanModel>();
listField.addListener(Events.Attach, new Listener<ListViewEvent<BeanModel>>() {
@Override
public void handleEvent(ListViewEvent<BeanModel> be) {
loader.load();
}
});
}
Cependant, si chargeur était un champ de classe, il ne serait pas nécessaire de le déclarer comme définitif:
public class testClass{
private ListLoader<BeanModel> loader = new PagedListLoader<BeanModel>();
private void testMethod (ListField<BeanModel> listField){
listField.addListener(Events.Attach, new Listener<ListViewEvent<BeanModel>>() {
@Override
public void handleEvent(ListViewEvent<BeanModel> be) {
loader.load();
}
});
//Could I modify loader's reference here, before the method executes?
//loader = null;
}
}
Est-ce que quelqu'un sait la raison pour laquelle ils garantissent les variables locales de ne pas changer quand ils est accessible mais ne le fais pas pour les champs de classe?
@jlordo. Pas exactement. Ce poste ne parle pas des champs, seulement des variables locales. –
Le même principe s'applique.C'est une classe interne (anonyme) qui fait référence à l'instance de la classe externe et qui peut donc accéder à ses champs. – jlordo
un autre ici http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-differen – kaos