当前位置: 代码迷 >> 综合 >> jdk8 方法引用 Method References
  详细解决方案

jdk8 方法引用 Method References

热度:36   发布时间:2023-12-08 03:37:37.0

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.htmlicon-default.png?t=M0H8https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html下面的博客,列出关于 方法引用的几个例子很不错,

Java 8的新特性—终极版_飞鸟Blog-CSDN博客_java8新特性

方法引用有四种:

  1. 第一种方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式:Class<T>::new
  2. 第二种方法引用的类型是静态方法引用,语法是Class::static_method
  3. 第三种方法引用的类型是某个类的成员方法的引用,语法是Class::method
  4. 第四种方法引用的类型是某个实例对象的成员方法的引用,语法是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

是不是觉得 编译器 很厉害

  相关解决方案