• java8 Lambda 获取方法引用的方法名


    用过mybatis plus都知道,使用LambdaQueryWrapper可以直接引用类的方法,非常的方便,其原理是使用序列化lambda和反序列化。但是有更简单的获取方式

    人狠话不多,直接上代码!!!!!!!(以下代码为根据参考的文章进行了优化调整。参考文章:https://blog.csdn.net/u012503481/article/details/100896507

        @FunctionalInterface
        public interface MyFun<T, R> extends java.util.function.Function<T, R>, Serializable {
    
        }
    
        public static void main(String[] args) throws Exception {
            test(MyTeacher::getAge);
        }
    
        private static<T> void test(MyFun<T, Object> myFun) throws Exception {
            // 直接调用writeReplace
            Method writeReplace = myFun.getClass().getDeclaredMethod("writeReplace");
            writeReplace.setAccessible(true);
            Object sl = writeReplace.invoke(myFun);
            SerializedLambda serializedLambda = (SerializedLambda) sl;
            System.out.println("serializedLambda数据为:"+serializedLambda);
            System.out.println("传入的方法名为:" + serializedLambda.getImplMethodName());
        }

    运行结果如下:

    serializedLambda数据为:SerializedLambda[capturingClass=class com.shotgun.my.api.po.pojos.defaultGroup.subGroup.MyTeacher, functionalInterfaceMethod=com/shotgun/my/api/po/pojos/defaultGroup/subGroup/MyTeacher$MyFun.apply:(Ljava/lang/Object;)Ljava/lang/Object;, implementation=invokeVirtual com/shotgun/my/api/po/pojos/defaultGroup/subGroup/MyTeacher.getAge:()Ljava/lang/Integer;, instantiatedMethodType=(Lcom/shotgun/my/api/po/pojos/defaultGroup/subGroup/MyTeacher;)Ljava/lang/Object;, numCaptured=0]
    传入的方法名为:getAge

    !!!白嫖警告!!!

    点个赞再走吧...

  • 相关阅读:
    JAVA 8 主要新特性 ----------------(二)JDK1.8优点概括
    js 对cookie 的操作
    js 中类似时钟的显示
    js 把数字转成2 ,8,16进制的方法
    js 对闭包的理解
    js 利用throw 写的一个小程序
    js 获取当前的时间
    ios使用jspatch中需要注意的事项
    IOS 开发中要注意的事项
    iOS 利用JSPatch 添加热补丁功能
  • 原文地址:https://www.cnblogs.com/wulm/p/13033052.html
Copyright © 2020-2023  润新知