美文网首页
java8 Lambda ::的几种目标方法引用方式

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

作者: Eshin_Ye | 来源:发表于2019-06-10 11:10 被阅读0次

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

    调用方法
    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");
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/sspaxctx.html