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 ::的几种目标方法引用方式)