Java 8 lambda实现原理 (面试会问) 表达式的主要应用

1.代替匿名内部类 实现Runnable线程案例    使用() -> {} 替代匿名类:(虽然还有其他的写法但这样写准没错)
public static void testPrimaryBefore(){

    new Thread(new Runnable() {
        public void run() {
            System.out.println(10);
        }
    }).start();

}
public static void testLambda(){
    new Thread(
            () -> {
                System.out.println("1");
            }
    ).start();
}

2.实现List集合遍历

public static void testListErgodicBefore(List<String> li){
    for (String s : li) {
        System.out.println("S:"+s);
    }

}
public static void testListErgodicLambda(List<String> li){
    li.forEach(s -> {
        System.out.println(s);
    });

}

3.使用lambda和函数式接口 (函数式接口待会会写一篇博客贴上链接)

https://blog.csdn.net/qq_38983577/article/details/81806012

最后介绍介绍lambda底层实现原理:

简单来说,

就是代码进行编译时,会自动生成一个私有的静态函数private static void lambda$0(java.lang.String),

这个私有的静态函数干的就是Lambda表达式里面的内容.

编译器会根据Lambda表达式进入这个metafactory类

然后会使Lambda表达式生成了一个内部类并调用lambda$0()。

public static CallSite metafactory(MethodHandles.Lookup caller,
                                       String invokedName,
                                       MethodType invokedType,
                                       MethodType samMethodType,
                                       MethodHandle implMethod,
                                       MethodType instantiatedMethodType)
            throws LambdaConversionException {
        AbstractValidatingLambdaMetafactory mf;
        mf = new InnerClassLambdaMetafactory(caller, invokedType,
                                             invokedName, samMethodType,
                                             implMethod, instantiatedMethodType,
                                             false, EMPTY_CLASS_ARRAY, EMPTY_MT_ARRAY);
        mf.validateMetafactoryArgs();
        return mf.buildCallSite();
}

下面这篇博客写的挺好的

https://www.cnblogs.com/WJ5888/p/4667086.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值