学习Java8系列-Lambda (4)

输出执行结果;

重点部分

重点部分
从mian方法中我们的重点就在于invokedynamic这个指令,重点要了解下是如何通过invokedynamic指令生成目标对象,invokedynamic指令通过找到BootstrapMethods中的方法,生成动态调用点,也是调用LambdaMetafactory的metafactory方法。

学习Java8系列-Lambda

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.heiqu.com/zwxfjx.html