Java 8语言规范的当前草案状态(第15.27.4章)
lambda表达式的值是对具有以下属性的类的实例的引用:
- 该类实现目标功能接口,如果目标类型是路口类型,则实现该路口的所有其他接口元素。
- 该类声明一个方法,该方法将覆盖功能接口超类型的抽象方法(以及其超接口的其他某些方法)。
- 方法的参数类型,返回类型和引发类型由接口的函数类型给出。
- 该方法的主体具有评估lambda主体(如果是表达式)或执行lambda主体(如果是块)的作用;如果期望结果,则从方法中返回。
- 该类没有覆盖上面提到的一个或多个接口的其他方法,除了它可以覆盖
Object该类的方法之外。
请注意,除了字节代码应支持上述规范外,JLS没有说明应如何编译代码。
这样,lambda表达式返回的对象
x -> System.out.print(x);
将是遵循上述规则的类的实例。
鉴于您的评论
consumer.getClass()
返回以下类
Example$$Lambda$1/1072591677
似乎它正在生成特定于lambda表达式的类似代理的类。



