码迷,mamicode.com
首页 > 其他好文 > 详细

jdk8系列二、方法引用

时间:2019-01-01 14:00:56      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:lambda   方法调用   system   code   util   class   each   repair   tor   

一、方法引用

  方法引用使得开发者可以直接引用现存的方法、Java类的构造方法或者实例对象。方法引用和Lambda表达式配合使用,使得java类的构造方法看起来紧凑而简洁,没有很多复杂的模板代码。

例子中,Car类是不同方法引用的例子,可以帮助读者区分四种类型的方法引用。

package com.study.demo.TestRefernce;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

public class Car {
    private String name ="I am a car";

    @Override
    public String toString() {
        return "Car{" +
                "name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }

    public static Car create(final Supplier< Car > supplier ) {
        return supplier.get();
    }

    public static void collide( Car car ) {
        System.out.println( "Collided " + car.toString() );
    }

    public void follow( Car another ) {
        System.out.println( "Following the " + another.toString() );
    }

    public void repair() {
        System.out.println( "Repaired " + this.toString() );
    }

    public static void main(String[] args) {
        final Car car = Car.create(Car::new);
        final List< Car > cars = Arrays.asList( car ,Car.create(Car::new));

        cars.forEach(Car::collide );
        cars.forEach(Car::repair);

        final Car car1 = Car.create(Car::new);
        cars.forEach(car1::follow);
    }
}

1、构造方法调用

方法引用的类型是构造器引用,语法是Class::new,或者更一般的形式:Class<T>::new。注意:这个构造器没有参数。
final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );

2、静态方法调用

方法引用的类型是静态方法引用,语法是Class::static_method。注意:这个方法接受一个Car类型的参数。
cars.forEach( Car::collide );

3、普通无参方法调用

方法引用的类型是某个类的成员方法的引用,语法是Class::method,注意,这个方法没有定义入参:
cars.forEach( Car::repair );

4、普通有参数方法调用

方法引用的类型是某个实例对象的成员方法的引用,语法是instance::method。注意:这个方法接受一个Car类型的参数:
final Car police = Car.create( Car::new );
cars.forEach( police::follow );

运行上述例子,可以在控制台看到如下输出(Car实例可能不同):

如果想了解和学习更详细的内容,可以参考官方文档
 

jdk8系列二、方法引用

标签:lambda   方法调用   system   code   util   class   each   repair   tor   

原文地址:https://www.cnblogs.com/wangzhuxing/p/10204612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!