1.语法分析:
双冒号 :: 为引⽤运算符,⽽它所在的表达式被称为⽅法引⽤。如果 Lambda 要表达的函数⽅案已经存在于某个⽅法 的实现中,那么则可以通过双冒号来引⽤该⽅法作为Lambda 的替代者。 下⾯两种写法的执⾏效果完全⼀样,⽽⽅法⼆⽅法引⽤的写法复⽤了已有⽅案,更加简洁。 ⽅法⼀ :Lambda 表达式: s -> System.out.println(s); 拿到参数之后经 Lambda 之⼿,继⽽传递给 System.out.println ⽅法去处理。 ⽅法⼆ : ⽅法引⽤: System.out::println 直接让 System.out 中的 println ⽅法来取代 Lambda 2.方法引用的语法 ( 1 )对象的引⽤ :: 实例⽅法名 ( 2 )类名 :: 静态⽅法名 ( 3 )类名 :: 实例⽅法名 ( 4 )类名 :: new ( 构造器引⽤ ) 3.举例public static void main(String[] args) {
Arrays.asList("a","b","c").forEach(new Consumer() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
//对象的引⽤ :: 实例⽅法名
Arrays.asList("a","b","c").forEach(s->System.out.println(s)); // 前
Arrays.asList("a","b","c").forEach(System.out::println); // 后
Suppliersup = new Supplier () { @Override public Double get() { return Math.random(); } }; //类名 :: 静态⽅法名 Supplier supp = ()->Math.random();// 前 Supplier suppp = Math::random;// 后 System.out.println(suppp.get());
Functionfun = new Function () { @Override public String apply(Product product) { return product.getName(); } }; //类名 :: 实例⽅法名 Function funn = (p)->p.getName(); // 前 Function funnn = Product::getName; // 后 String productName = funnn.apply(new Product(2L,"⼩⽶⼿机",3200d)); System.out.println("productName = " + productName);
Suppliersnew = new Supplier () { @Override public Product get() { return new Product(); } }; //类名 :: new (构造器引⽤) Supplier snew1 = ()->new Product(); // 前 Supplier snew2 = Product::new; // 后 System.out.println(snew2.get());



