当前位置:

20.java8

故人归 |  2025-07-13
 19人浏览

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());
    }
}

文章评论