package com.common.jdk8;import java.util.Arrays;import java.util.List;//方法引用publicclassJdk8Test2{publicstaticvoidmain(String[] args){//构造器引用:它的语法是Class::new,或者更一般的Class< T >::new实例如下:
Car car = Car.create(Car::new);
Car car2 = Car.create(Car::new);
List<Car> cars = Arrays.asList(car,car2);//静态方法引用:它的语法是Class::static_method,实例如下:
cars.forEach(Car::collide);//特定类的任意对象的方法引用:它的语法是Class::method实例如下:
cars.forEach(Car::repair);//特定对象的方法引用:它的语法是instance::method实例如下:
Car police = Car.create(Car::new);
cars.forEach(police::follow);//println 特殊的方法引用
cars.forEach(System.out::println);}}@FunctionalInterfaceinterfaceSupplier<T>{
T get();}classCar{//Supplier是jdk1.8的接口,这里和lamda一起使用了publicstatic Car create(final Supplier<Car> supplier){return supplier.get();}publicstaticvoidcollide(final Car car){
System.out.println("Collided "+ car.toString());}publicvoidfollow(final Car another){
System.out.println("Following the "+ another.toString());}publicvoidrepair(){
System.out.println("Repaired "+this.toString());}}
运行结果
Collided com.common.jdk8.Car@7eda2dbb
Collided com.common.jdk8.Car@6576fe71
Repaired com.common.jdk8.Car@7eda2dbb
Repaired com.common.jdk8.Car@6576fe71
Following the com.common.jdk8.Car@7eda2dbb
Following the com.common.jdk8.Car@6576fe71
com.common.jdk8.Car@7eda2dbb
com.common.jdk8.Car@6576fe71