方法引用
Posted xiechenglin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法引用相关的知识,希望对你有一定的参考价值。
一、方法引用概述
1.方法引用是lambda表达式一种简写的方式,回忆lambda表达式,它由接口申明和方法定义组成,而在方法引用中方法的定义已然让有符合接口定义的方法代替,不用重新定义方法。
2.方法引用有四种基本方式:①Class::new:获取该实例对象;
②Class::static_method:调用该class的静态方法;
③Class::method:调用该class的任意方法;
④instance::method:调用该实例的任意方法。
二、基本功能使用
1 public class FunctionRefer { 2 /* 3 *内部接口定义 4 */ 5 interface FunctionOperator{ 6 int sum(int a ,int b); 7 } 8 9 /* 10 * 静态方法的引用或任意对象方法引用:Class::method 11 */ 12 @Test 13 public void add(){ 14 //lumbda表达式执行的过程 15 FunctionOperator functionOperator = (a,b)->a+b; 16 Consumer<String> consumer = System.out::println; 17 consumer.accept("lumbda执行结果:"+functionOperator.sum(1,2)); 18 //函数引用过程,因为在Math中有个静态方法 19 FunctionOperator functionOperator1 = Math::addExact; 20 consumer.accept("lumbda执行结果:"+functionOperator1.sum(1,2)); 21 } 22 23 class FunctionReferImpl implements FunctionOperator{ 24 @Override 25 public int sum(int a, int b) { 26 return a+b; 27 } 28 } 29 30 /** 31 * 特定对象的引用 32 */ 33 @Test 34 public void objectRefer(){ 35 //supplier是jdk1.8的函数,这个函数定义是有一个返回值,无入参,与创建实例对象的构造函数方法定义相同可以接收 36 Supplier<FunctionOperator> fun = FunctionReferImpl::new; 37 FunctionOperator functionOperator = fun.get(); 38 FunctionOperator functionOperator1 = functionOperator::sum; 39 Consumer<String> consumer = System.out::println; 40 consumer.accept("方法引用方式:"+functionOperator1.sum(1,2)); 41 } 42 }
三、总结
1.在方法引用上面注意点:
①该引用的函数必定与定义的接口形参和返回值类型一致;
②调用静态方法和调用实例方法时使用的调用对象是不一样的,一个是Class,一个是instance;
③其实在方法引用上面还有许多函数式接口的引用(可以参考java.util.function)。
④常用function:Function:接受一个输入参数,返回一个结果;BiFunction:接受两个参数返回一个对象;Consumer:接受一个输入参数并且无返回操作,accept;Predicate:接受一个输入参数,返回一个布尔值结果
Supplier:无参数,返回一个结果。
以上是关于方法引用的主要内容,如果未能解决你的问题,请参考以下文章