zoukankan      html  css  js  c++  java
  • 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

    !!!白嫖警告!!!

    点个赞再走吧...

  • 相关阅读:
    Mysql(三) Mysq慢查询日志
    Mysql(二) Mysql错误日志
    Mysql(一) Mysql二进制日志
    HA(二)Heartbeat实现LVS集群DR模式下Director高可用
    HA(一)高可用集群原理
    LVS(五)LVS集群RealServer高可用健康监测
    LVS(四)LVS集群DR模式
    LVS(三)LVS集群NAT模式
    LVS(二)LVS集群中实现的三种负载均衡技术
    Cocos2d-JS实现的打飞机
  • 原文地址:https://www.cnblogs.com/wulm/p/13033052.html
Copyright © 2011-2022 走看看