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 表达式的另外一种表现形式。

源于:http://www.runoob.com/java/java8-method-references.html

上一篇下一篇

猜你喜欢

热点阅读