方法引用
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Car { public static Car create(final Supplier<Car> supplier) { return supplier.get(); } public static void collide(final Car car) { System.out.println("静态方法" + car.toString()); } public void follow(final Car another) { System.out.println("应该是this与传进来的对象比较" + another.toString()); } public void repair() { System.out.println("私有方法 " + this.toString()); } }
|
可以先这么写:
1 2 3 4 5 6
| Car car = Car.create(new Supplier<Car>() { @Override public Car get() { return new Car(); } });
|
在IDE中,把鼠标移动new Supplier上,可以看到一个黄色的小灯,点击小灯,出现两个选项一个是替换为lambda表达式,一个是替换为方法引用。
1
| Car car = Car.create(() -> new Car());
|
1
| Car car = Car.create(Car::new);
|
构造器引用:它的语法是Class::new
1
| Car car = Car.create(Car::new);
|
静态方法引用:它的语法是Class::static_method
1 2
| final List<Car> cars = Arrays.asList(new Car()); cars.forEach( Car::collide );
|
特定类的任意对象的方法引用:
1
| cars.forEach( Car::repair );
|
特定对象的方法引用:
1 2
| final Car police = Car.create( Car::new ); cars.forEach( police::follow );
|