匿名类对象
匿名类对象的定义的语法格式:
new 实现接口()
{
//匿名内部类类体部分
}
或者
new 父类构造器(实参列表)
{
//匿名内部类类体部分
}
lambda表达式
Lambda表达式一定是借助函数式接口才存在的,Lambda表达式是作为函数式接口实现类的实例存在。
函数式接口
例如:
方法应用/构造器引用
方法引用
当lambda体中有实现的方法时,才可以使用方法引用。即函数式接口型都可以使用。
直接深入到方法体中进行方法引用,因为都是函数式接口,类中只有一个抽象方法,所以直接深入到方法体内。方法体内和形参,对象,类以及他们可以使用的方法有关,所以可以分为三部分:
1. 抽象方法的方法体是由对象调用非静态方法实现:
这里的对象不是抽象方法的形参。
2. 由类调用自身的静态方法实现抽象方法的方法体:
3.方法体由形参调用自身的方法实现:
构造器引用
和方法引用类似,函数式接口的抽象方法的返回值类型对应某一个类,并且该抽象方法的形参列表 和 该类的形参列表可以一致时,可以使用构造器引用。
解释:T get()返回的是T类型的(这里设置返回的是Employee对象),没有参数;对比:空参构造器Employee(),new的时候返回的一个Employee对象,也没有参数,所以重写的get()方法是通过Employee构造器调用 new方法实现,所以类似与类 :: 方法,Employee :: new。
因为R apply(T t) 对应了 Employee(int id)构造器,所以T t已经表示了参数,所以构造器引用时就不必加参数。可以推断出。
数组引用
可以把数组看作一个特殊的类,则写法与构造器引用一致。