In Java 8 it looks like the lambdas of a class are kept in an array. For example, lets say we have this class:
public class LambdaFactory {
public Suppli
The Java Language Specification states
At run time, evaluation of a lambda expression is similar to evaluation of a class instance creation expression, insofar as normal completion produces a reference to an object. [...]
Either a new instance of a class with the properties below is allocated and initialized, or an existing instance of a class with the properties below is referenced.
[...]
These rules are meant to offer flexibility to implementations of the Java programming language, in that:
- A new object need not be allocated on every evaluation.
- [...]
As such, it is up to a compiler or run time environment to decide what should be returned when a lambda expression is evaluated.
My question is, can I get ahold of the lambdas in a class? I don't have any reason to do so, I just like dissecting things
You can think of a lambda expression as any other class constant, a String
, an integer literal, etc. These are constants that appear in the constant pool of a .class
file. These are references to objects that are created and exist at run time. There is no way to refer to the actual objects from a class' constant pool.
In the case of a lambda, it wouldn't be helpful anyway because it might not actually be the same object.