/** * 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。<br> * 与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 *@date:2018年7月9日 *@author:zhangfs */ 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()); } public void repair() { System.out.println("Repaired " + this.toString()); } /** * 构造器引用<br> * 语法是Class::new,或者更一般的Class< T >::new。请注意构造器没有参数 */ @Test public void constructorRef() { Car car=Car.create(Car::new); car.repair(); } /** * 类的静态方法引用<br> * 语法是Class::static_method。请注意这个方法接受一个Car类型的参数。 */ @Test public void staticMethodRef() { final Car car = Car.create( Car::new ); final List< Car > cars = Arrays.asList( car ); // Car::collide(); cars.forEach( Car::collide ); } /**类的方法引用<br> * 语法是Class::method。请注意,这个方法没有参数 */ @Test public void commonMethodRef() { final Car car = Car.create( Car::new ); final List< Car > cars = Arrays.asList( car ); // Car::collide(); cars.forEach( Car::repair ); } /** * 对象的方法引用<br> * 语法是instance::method。请注意,这个方法接受一个Car类型的参数 */ @Test public void objMethodRef() { final Car police = Car.create( Car::new ); final List< Car > cars = Arrays.asList( police ); cars.forEach( police::follow ); } }