https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlhttps://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html下面的博客,列出关于 方法引用的几个例子很不错,
Java 8的新特性—终极版_飞鸟Blog-CSDN博客_java8新特性
方法引用有四种:
- 第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式:Class<T>::new
- 第二种方法引用的类型是静态方法引用,语法是Class::static_method
- 第三种方法引用的类型是某个类的成员方法的引用,语法是Class::method
- 第四种方法引用的类型是某个实例对象的成员方法的引用,语法是instance::method
这里截取其中 【实例方法】的列子,很具有代表性
cars.forEach( Car::repair );
下面列出自己关于 构造器引用的例子,说明方法引用是能够自动识别参数的结构的。
public class Car {private int code;private String name;// 无参构造器public Car() {}// string 参数构造器public Car(String name) {this.name = name;}// int 参数构造器public Car(int code) {this.code = code;}// 两个参数构造器public Car(int code,String name) {this.code = code;this.name = name;}public int getCode() {return code;}public String getName() {return name;}}
public class ReferenceToConstructor {public static void main(String[] args) {Supplier<Car> generator1 = Car::new ;Function<String,Car> generator2 = Car::new;IntFunction<Car> generator3 = Car::new;BiFunction<Integer,String,Car> generator4 = Car::new;Car c1 = generator1.get();System.out.println(c1.getName());Car c2 = generator2.apply("11"); System.out.println(c2.getName());Car c3 = generator3.apply(22); System.out.println(c3.getCode());Car c4 = generator4.apply(33,"kdkdkd"); System.out.println(c4.getCode()+"--"+c4.getName());}
}
日志输出结果:
null
11
22
33--kdkdkd
是不是觉得 编译器 很厉害