# 方法引用: method reference. 方法引用实际上是lambda表达式的一种语法糖 lambda能实现的恰好一个方法引用能够使用,简化lambda表达式的使用 lambda表达式的实现恰好有一个方法,就可以替换方法引用 lambda表达式更加通用 classname::staticmethod classname.staticmethod 两者没有关系 前者不能传入参数,参数由虚拟机推断得出,相当于方法指针,指向方法 后者是一个方法的调用,要传入参数,方法调用 ```java list.forEach(item -> System.out.println(item)); ==> list.forEach(System.out::println); public final static PrintStream out = null; ``` 方法引用本质上是 我们可以将方法引用看做一个**【函数指针**】,function pointer :: jdk8 新增语法格式 根据上下文判断 ## 方法引用分类: 1.类名::静态方法名. 创建Student类 定义一个静态方法 ```java package com.wangx.methodreference; //Studenbt类 public class Student { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public static int compareStudentByScore(Student student1, Student student2){ return student1.score - student2.score; } public static int compareStudentByName(Student student1, Student student2){ return student1.getName().compareTo(student2.getName()); } } ``` ```java package com.wangx.methodreference; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MethodReferenceTest { public static void main(String[] args) { Student student1 = new Student("sha111",20); Student student2 = new Student("sdasd", 458); Student student3 = new Student("dasfad",456); List students = Arrays.asList(student1, student2, student3); //静态方法引用 // students.sort(Student::compareStudentByScore); // students.forEach(item -> System.out.println(item.getName())); // System.out.println("============================"); // students.sort(Student::compareStudentByName); // students.forEach(item -> System.out.println(item.getName())); }); } } ``` 2.引用名(对象名)::实例方法名. 3. 4. 最后修改:2019 年 10 月 18 日 © 允许规范转载 打赏 赞赏作者 赞 0 如果觉得我的文章对你有用,请随意赞赏