1.方法引用(method reference)
使用lambda表达式会创建匿名方法
方法引用通过方法的名字来指向一个方法
方法引用可以使语言的构造更紧凑,减少冗余代码
方法引用使用一对冒号::
-
类构造器引用语法:classname:new或者classname::new,例如:ArrayList::new
-
静态方法引用语法:classname::methodname,例如:Person::getAge
-
特定类的对象的实例方法引用语法:classname:methodname
-
特定对象的方法引用语法:instancename:methodname,例如System.out::println
public class Java8Test {
public static void main(String[] args) {
//类构造器引用 classname::new
final Car car = Car.create(Car::new);
final List<Car> cars = Arrays.asList(car);
//静态方法引用
cars.forEach(Car::collide);
//类::实例方法名(特殊)
cars.forEach(Car::repair);
//对象的实例方法引用
cars.forEach(car::follow);
//System.out::println方法作为静态方法来引用
cars.forEach(System.out::println);
}
}
class Car {
/**
* 静态方法
* @param supplier
* @return
*/
public static Car create(final Supplier<Car> supplier) {
return supplier.get();
}
/**
* 静态方法
* @param car
* @return
*/
public static void collide(final Car car) {
System.out.println("collide "+ car.toString());
}
/**
* 有参实例方法
* @param car
*/
public void follow(final Car car) {
System.out.println("follow "+car.toString());
}
/**
* 无参实例方法
*/
public void repair() {
System.out.println("repair "+this.toString());
}
}