java8 Lambda ::的几种目标方法引用方式
2019-06-10 本文已影响0人
Eshin_Ye
首先定义一个调用方法、和目标方法
调用方法
public void doWithTargetMethod(BiConsumer<String, String> 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<String, String>() {
@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<TestMethod, String> consumer2 = TestMethod::targetMethod2;
TestMethod tm = new TestMethod();
调用accept方法时,传入对应类的实例,作为目标方法的this
consumer2.accept(tm,"eshin");