Java8 特性-方法引用
- 分解:Car::create,其中Car是类对象,create为方法,表示Car类对象引用了create方法.前提条件为:
- 静态方法且有参数或者非静态方法且没有参数;
- Lambda方式调用时必须用类对象调用,否则需要实例化对象调用;
下面据说是西门的例子,很好说明:
package com.entitys;
import java.util.function.Supplier;
/**
* 静态方法且有参数 / 非静态方法且没有参数
* Lambda 方式调用时必须用类对象调用
* 否则需要实例化对象调用
*/
public class Car {
//静态方法且有参数
public static Car create( final Supplier< Car > supplier ) {
return supplier.get();
}
//静态方法且有参数
public static void collide(final Car car ) {
System.out.println( "Collided " + car.toString() );
}
public void follow(final Car another ) {
System.out.println( "Following the " + another.toString());
}
//普通方法且没有参数 可以直接Lambda直接调用
public void repair() {
System.out.println( "Repaired " + this.toString() );
}
}
测试类:
Car car = Car.create( Car::new );
List<Car> cars = Arrays.asList( car );
cars.forEach(Car::collide);
cars.forEach( car::follow );
cars.forEach( Car::repair );
- 以上不满足类对象调用方法只有一个follow;
测试结果:
chenyb 随笔记录,只为方便自己学习
2019-10-09