方法引用的使用 jdk8
Posted 大哥超帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法引用的使用 jdk8相关的知识,希望对你有一定的参考价值。
//方法引用与函数试接口
//前提,lambda是特定匿名内部类(只有一个方法需要实现的接口,也就是函数式接口)的简化,方法引用是lambda的简化
//因为executor是函数式接口,所以实例化的方法只能是 void execute(Runnable command); 如2 所以 2可以简化成3
//可以看到简化后入参一致,返回一致
//又因为逻辑只有一行,他还可以继续简化为方法引用
//方法引用的作用:可以在一定条件下简化lambda表达式写法,旨在编写更加简洁紧凑的代码风格,提高代码重用率,不提高执行效率。
//
//可简单理解为:如果一个lambda表达式大括号中的代码仅仅是调用了另外一个方法,此时可用方法引用替换此lambda表达式。
//
//注意:方法引用旨在简化lambda表达式写法,在lambda表达式的基础上使用,不能脱离lambda表达式单独使用。
//————————————————
//版权声明:本文为CSDN博主「雨橄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/xiao_yu_gan/article/details/124704697
//不要单独看方法引用,也不要把他想的太复杂
//1
Executor executor=Runnable::run;
//2
Executor executor2= new Executor()
@Override
public void execute(Runnable command)
command.run();
;
//3
Executor c = (r) -> r.run();
//4
Collections.emptyList().stream().filter(r-> Objects.nonNull(r)).filter(Objects::nonNull).count();
jdk8系列方法引用
一、方法引用
方法引用使得开发者可以直接引用现存的方法、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的主要内容,如果未能解决你的问题,请参考以下文章