Why does the code not throw a NullPointerException
when I use a method reference tied to a variable dog
which I later assigned null
to?
I am using Java 8.
import java.util.function.Function;
class Dog {
private int food = 10;
public int eat(int num) {
System.out.println("eat " + num);
this.food -= num;
return this.food;
}
}
public class MethodRefrenceDemo {
public static void main(String[] args) {
Dog dog = new Dog();
Function<Integer, Integer> function = dog::eat;
dog = null;
// I can still use the method reference
System.out.println("still have " + function.apply(2));
}
}
The dog::eat
method reference captures the instance referenced by dog
, so when you call function.apply(2)
, the eat
method is executed for that instance. It doesn't matter that the dog
variable no longer references that instance.
The variable dog
used at the lambda expression is visible only at the scope of the lambda expression since its definition and nullifying the dog
will not affect the method reference dog::eat
.
An example without usage of dog
with the same functionality:
Function<Integer, Integer> function = new Dog()::eat;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With