方法引用: method reference.

方法引用实际上是lambda表达式的一种语法糖

lambda能实现的恰好一个方法引用能够使用,简化lambda表达式的使用
lambda表达式的实现恰好有一个方法,就可以替换方法引用
lambda表达式更加通用

classname::staticmethod
classname.staticmethod
两者没有关系
前者不能传入参数,参数由虚拟机推断得出,相当于方法指针,指向方法
后者是一个方法的调用,要传入参数,方法调用

list.forEach(item -> System.out.println(item)); ==> list.forEach(System.out::println);

public final static PrintStream out = null;

方法引用本质上是 我们可以将方法引用看做一个【函数指针】,function pointer
:: jdk8 新增语法格式 根据上下文判断

方法引用分类:

1.类名::静态方法名.

创建Student类
定义一个静态方法
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());
    }
}
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<Student> 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 日
如果觉得我的文章对你有用,请随意赞赏