Lambda expressions and capturing variables
Access to Variables in the Contained Scope
- A lambda expression can access:
- Instance variables of the containing class.
- Static variables defined in the external class.
- The this parameter, which references the calling instance of the external class.
Access to Local Variables
- When using external scope local variables:
- The local variable must be effectively final.
- Effectively final: A variable whose value does not change after being assigned.
- Does not need to be explicitly declared as final.
- Modifying the local variable (inside or outside the lambda) invalidates its capture.
Modification Restriction
Cannot modify:
- Local variables captured within the lambda expression.
- Modifying these variables removes their effectively final status.
Modification of Instance Variables
A lambda expression can:
- Use and modify instance variables of the calling class.
- There is no restriction on "final" status for instance variables.
Example: Capturing Local Variable from External Scope
Code:
interface MyFunc { int func(int n); } class VarCapture { public static void main(String args[]) { // Variável local que pode ser capturada int num = 10; MyFunc myLambda = (n) -> { // Uso correto da variável num int v = num + n; // A instrução abaixo é inválida porque tenta modificar num // num++; return v; }; // Usando a expressão lambda System.out.println(myLambda.func(8)); // Exibe: 18 // Modificar num aqui também causaria erro // num = 9; } }
Explanation:
Num Capture:
num is effectively final because it is not changed after the initial assignment.
Lambda can access num, but cannot modify it.Execution:
myLambda.func(8) returns 18 because:
num (10) is added to the parameter n (8), producing 18.Error due to Modification:
Uncommenting num or num = 9 would invalidate the capture, causing a compilation error.Note:
Important: Instance or static variables can be used and modified without restrictions within lambda expressions.
Restrictions apply only to external scope local variables.
The above is the detailed content of Lambda expressions and capturing variables. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Troubleshooting and solutions to the company's security software that causes some applications to not function properly. Many companies will deploy security software in order to ensure internal network security. ...

Field mapping processing in system docking often encounters a difficult problem when performing system docking: how to effectively map the interface fields of system A...

When using MyBatis-Plus or other ORM frameworks for database operations, it is often necessary to construct query conditions based on the attribute name of the entity class. If you manually every time...

Start Spring using IntelliJIDEAUltimate version...

Solutions to convert names to numbers to implement sorting In many application scenarios, users may need to sort in groups, especially in one...

Conversion of Java Objects and Arrays: In-depth discussion of the risks and correct methods of cast type conversion Many Java beginners will encounter the conversion of an object into an array...

Detailed explanation of the design of SKU and SPU tables on e-commerce platforms This article will discuss the database design issues of SKU and SPU in e-commerce platforms, especially how to deal with user-defined sales...

When using TKMyBatis for database queries, how to gracefully get entity class variable names to build query conditions is a common problem. This article will pin...
