Java8 方法引用
2019-01-25 本文已影响0人
酷酷的小k
方法引用通过方法的名字来指向一个方法
方法引用可以使语言的构造更紧凑简洁,减少冗余代码
方法引用使用一对冒号 ::
Java 中 4 种不同的方法引用例子如下:
package com.mvc.test;
import java.util.Arrays;
import java.util.List;
/**
* 方法引用
*
* @author smallk
* @date 2019/1/22 15:34
*/
public class MethodReferenceTest {
public static void main(String[] args) {
//构造器引用:它的语法是Class::new
Student student = Student.create(Student::new);
List<Student> list = Arrays.asList(student);
//静态方法引用:它的语法是Class::static_method
list.forEach(Student::collide);
//特定类的任意对象的方法引用:它的语法是Class::method
list.forEach(Student::repair);
//特定对象的方法引用:它的语法是instance::method
list.forEach(student::follow);
}
}
interface Supplier<T> {
/**
* T
*
* @return T
*/
T get();
}
class Student {
public static Student create(Supplier<Student> supplier) {
return supplier.get();
}
public static void collide(Student student) {
System.out.println("Collided " + student.toString());
}
public void follow(Student student) {
System.out.println("Following the " + student.toString());
}
public void repair() {
System.out.println("Repaired " + this.toString());
}
}
方法引用 | Lambda 表达式 |
---|---|
Class::new | (a, b...) -> new Class(a, b...) |
Class::static_method | (a, b...) -> Class.static_method(a, b...) |
Class::method | (a, b...) -> a.method(b...) |
instance::method | (a, b...) -> instance.method(a, b...) |
所谓的方法引用,可以理解为 Lambda 表达式的另外一种表现形式。