java8 Lambda ::的几种目标方法引用方式

首先定义一个调用方法、和目标方法

//调用方法
public void doWithTargetMethod(BiConsumer biConsumer,String key,String value) {
		biConsumer.accept(key,value);
	}
//目标方法1
public void targetMethod(String msg,String value) {
		System.out.println(msg+":"+value);
	}
//目标方法2
public void targetMethod2( String a){
		System.out.println(a+" param :" +this.key);
	}
//目标方法3
public static void  targetMethod3(String msg,String value) {
		System.out.println(msg+":"+value);
	}

传统调用方式

doWithTargetMethod(new BiConsumer() {

			@Override
			public void accept(String t, String u) {
				targetMethod(t,u);
			}
		}, "hello", "eshin");

一般Lambda 表达式调用

//调用时如下
doWithTargetMethod((k,v)->{targetMethod(k,v);}, "hello","eshin");

使用‘::’进行方法引用 通过实例对非静态方法的引用
//需要通过实例调用
doWithTargetMethod(new TestMethod()::targetMethod, "hello","eshin1");

通过类对静态方法的引用

doWithTargetMethod(TestMethod::targetMethod3,"hello","eshin3");

通过类对非静态方法的引用

//第一个参数需与类名一致
BiConsumer consumer2 = TestMethod::targetMethod2;
TestMethod tm = new TestMethod();
//调用accept方法时,传入对应类的实例,作为目标方法的this
consumer2.accept(tm,"eshin");

你可能感兴趣的:(java8 Lambda ::的几种目标方法引用方式)