Maison >Java >javaDidacticiel >Pourquoi les expressions Lambda nécessitent-elles des variables finales ou effectivement finales ?

Pourquoi les expressions Lambda nécessitent-elles des variables finales ou effectivement finales ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 10:08:09802parcourir

Why Do Lambda Expressions Require Final or Effectively Final Variables?

La variable utilisée dans l'expression lambda requiert la finalité

Le message d'erreur "La variable utilisée dans l'expression lambda doit être finale ou effectivement finale" apparaît lors de la tentative d'utilisation d'une variable non finale. variable dans une expression lambda. Cette exigence garantit l'immuabilité de la variable capturée.

Dans l'extrait de code fourni :

private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
    ...
    cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
        ...
        if (calTz == null) {
            calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
        }
    });
    ...
}

La variable calTz est utilisée dans l'expression lambda et n'a pas de statut final garanti. Cela viole la règle selon laquelle les expressions lambda ne peuvent capturer que des variables finales ou effectivement finales.

Pourquoi cette règle est-elle en place ? La spécification du langage Java (JLS) explique au §15.27.2 qu'elle empêche l'accès aux variables locales à changement dynamique, atténuant ainsi les problèmes de concurrence. En garantissant que les variables capturées sont immuables, le langage réduit le risque de bugs.

Cette exigence s'applique également aux classes internes anonymes. Les variables utilisées dans ces classes doivent également être finales ou effectivement finales pour garantir la sécurité des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn