In lambda expressions, variables used within the scope of the expression are expected to be either final or "effectively final". This restriction arises from the immutability requirement imposed on captured variables.
The Java Language Specification (JLS) explains this in §15.27.2:
"The restriction to effectively final variables prohibits access to dynamically-changing local variables, whose capture would likely introduce concurrency problems."
To minimize the risk of bugs, it was decided that captured variables should never be mutable. This ensures that the values accessed by the lambda remain consistent throughout its execution.
This restriction applies not only to lambda expressions but also to anonymous inner classes. Therefore, it is crucial to ensure that variables used within such constructs are either declared final or effectively final (i.e., assigned a value only once and never modified).
The above is the detailed content of Why Must Lambda Expression Variables Be Effectively Final?. For more information, please follow other related articles on the PHP Chinese website!