首页 > 其他 > 详细

something about SAM

时间:2021-05-29 09:06:51      阅读:19      评论:0      收藏:0      [点我收藏+]

kotlin code:

fun go(r: Runnable) = r.run()

//fun fGo(f: () -> Unit) = go(f)

fun main() {
    val g: () -> Unit = { println("what")}
    go(g)
}

equivalent java code:

package temp;

import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Lambda;

/**
 * @author Xin Wang
 * @date 5/28/2021
 */

public class Temp2Kt {
    public final static void go(Runnable r) {
        r.run();
    }

    public static void main(String[] args) {


        final class Temp2Kt$sam$java_lang_Runnable$0 implements Runnable {
            private final Function0 function;

            public Temp2Kt$sam$java_lang_Runnable$0(Function0 function) {
                super();
                this.function = function;
            }

            @Override
            public void run() {
                final Object result = function.invoke();
            }
        }

        //////////////main
        // correspond to // val g: () -> Unit = { println("what")}
        final Temp2Kt$main$g$1 instance = Temp2Kt$main$g$1.INSTANCE;
        // correspond to // go(g)
        final Temp2Kt$sam$java_lang_Runnable$0 g = new Temp2Kt$sam$java_lang_Runnable$0(instance);
        go(g);
    }
}

// this is an inner class of Temp2Kt
final class Temp2Kt$main$g$1 extends Lambda implements Function0 {

    public final static Temp2Kt$main$g$1 INSTANCE = new Temp2Kt$main$g$1();

    public Temp2Kt$main$g$1() {
        super(0);
    }

    @Override
    public Object invoke() {
        this.invoke1();
        return null;
    }

    public final void invoke1() {
        System.out.println("what");
    }
}

something about SAM

原文:https://www.cnblogs.com/scaventz/p/14823939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!