java8新特性之方法引用(直接用案例教会你使用)

目录

一、什么是方法引用

二、四种不同的方法引用

1、构造器引用

2、静态方法引用

3、某个类的成员方法引用

4、某个实例对象的成员方法引用

三、方法引用的特点


一、什么是方法引用

方法引用是一个更加紧凑,易读的 Lambda 表达式,注意方法引用是一个 Lambda 表达式,其中方法引用的操作符是双冒号 "::"

二、四种不同的方法引用

下面,我们在 Car 类中定义了 4 个方法作为例子来区分 Java 中 4 种不同方法的引用。

public static class Car {

    public static Car create( final Supplier< Car > supplier ) {

        return supplier.get();

    }              

    public static void collide( final Car car ) {

        System.out.println( "Collided " + car.toString() );

    }

    public void follow( final Car another ) {

        System.out.println( "Following the " + another.toString() );

    }

    public void repair() {   

        System.out.println( "Repaired " + this.toString() );

    }

}

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 );

三、方法引用的特点

当出现:x->Object(x)格式的时候,往往我们就可以简化成方法引用了。

举例如下:使用forEachArrayList<>进行遍历
写法1:匿名内部类

        Integer[] arr={1,2,3,4,5,6};

        List<Integer> list = Arrays.asList(arr);

        //使用匿名内部类

        list.forEach(new Consumer<Integer>() {

            @Override

            public void accept(Integer x) {

                System.out.println(x);

            }

        });

forEach方法源码

 default void forEach(Consumer<? super T> action) {

        Objects.requireNonNull(action);

        for (T t : this) {

            action.accept(t);

        }

    }

写法2:使用lambda表达式简化

         Integer[] arr={1,2,3,4,5,6};

        List<Integer> list = Arrays.asList(arr);

        //使用lambdaSystem.out是一个对象,println是对象上的一个方法

        list.forEach((x) ->System.out.println(x));

写法3:使用方法引用

Integer[] arr={1,2,3,4,5,6};

        List<Integer> list = Arrays.asList(arr);

        //使用方法引用

        list.forEach(System.out::println);

其他新特性:

java8新特性之lambda表达式(让你代码写的更优雅)icon-default.png?t=M5H6https://blog.csdn.net/wanghaiping1993/article/details/125246247

java8新特性之Steam(告别繁琐的循环遍历)icon-default.png?t=M5H6https://blog.csdn.net/wanghaiping1993/article/details/125284521

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值