What are captured variables in Java Local Classes

java

Solution

What is captured variable,what is its use and why is that needed?

A captured variable is one that has been copied so it can be used in a nested class. The reason it has to be copied is the object may out live the current context. It has to be `final` (or effectively `final` in Java 8) so there is no confusion about whether changes to the variable will be seen (because they won't)

Note: Groovy does have this rule and a change to the local variable can mean a change to the value in the enclosing class which is especially confusing if multiple threads are involved.

An example of capture variable.

public void writeToDataBase(final Object toWrite) {
    executor.submit(new Runnable() {
        public void run() {
             writeToDBNow(toWrite);
        }
    });
    // if toWrite were mutable and you changed it now, what would happen !?
}
// after the method returns toWrite no longer exists for the this thread...

Problem

The Java documentation for Local Classes says that: In addition, a local class has access to local variables. However, a local class can only access local variables that are declared final. When a local class accesses a local variable or parameter of the enclosing block, it captures that variable or parameter. For example, the PhoneNumber constructor can access the local variable numberLength because it is declared final; numberLength is a captured variable. What is captured variable,what is its use and why is that needed? Please help me in understanding the concept of it.

Original source

Related problems