我们都知道Java8引入了lambda表达式,而方法引用是为了进一步简化lambda表达式,通过类名或者实例名与方法名的组合来直接访问到类或者实例已经存在的方法或者构造方法。方法引用使用**::来定义,::**的前半部分表示类名或者实例名,后半部分表示方法名,如果是构造方法就使用NEW来表示。
方法引用在Java8中使用方式相当灵活,总的来说,一共有以下几种形式:
下面来看一个例子:
public class MethodReferenceTest {
public static void main(String[] args) {
ArrayList<Car> cars = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Car car = Car.create(Car::new);
cars.add(car);
}
cars.forEach(Car::showCar);
}
@FunctionalInterface
interface Factory<T> {
T create();
}
static class Car {
public void showCar() {
System.out.println(this.toString());
}
public static Car create(Factory<Car> factory) {
return factory.create();
}
}
}
输出结果:
learn.MethodReferenceTest$Car@769c9116
learn.MethodReferenceTest$Car@6aceb1a5
learn.MethodReferenceTest$Car@2d6d8735
learn.MethodReferenceTest$Car@ba4d54
learn.MethodReferenceTest$Car@12bc6874
在上面的例子中使用了Car::new,即通过构造方法的方法引用的方式进一步简化了lambda的表达式,Car::showCar,即表示实例方法引用。
在动力节点在线的视频课程中有Java8新特性视频教程,里面对Java8的各个新特性都有详细的介绍和用法解析,想学习的小伙伴抓紧时间行动起来吧。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54