美文网首页
根据get或is方法获取参数名

根据get或is方法获取参数名

作者: 扮鬼之梦 | 来源:发表于2021-10-13 17:32 被阅读0次

工具类

import java.io.Serializable;
import java.lang.invoke.SerializedLambda;
import java.lang.reflect.Method;

public class LambdaUtils {

    private static final String GET = "get";
    private static final String IS = "is";

    public static <T, R> String convertToFieldName(IGetter<T, R> fn) {
        SerializedLambda lambda = getSerializedLambda(fn);
        String methodName = lambda.getImplMethodName();
        String prefix = null;
        if (methodName.startsWith(GET)) {
            prefix = GET;
        } else if (methodName.startsWith(IS)) {
            prefix = IS;
        }
        if (prefix == null || prefix.equals(methodName)) {
            throw new RuntimeException("无效的getter方法: " + methodName);
        }
        return new StringBuilder().append(Character.toLowerCase(methodName.charAt(prefix.length()))).append(methodName.substring(prefix.length() + 1)).toString();
    }

    private static <T, R> SerializedLambda getSerializedLambda(Serializable fn) {
        SerializedLambda lambda;
        try {
            Method method = fn.getClass().getDeclaredMethod("writeReplace");
            method.setAccessible(Boolean.TRUE);
            lambda = (SerializedLambda) method.invoke(fn);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return lambda;
    }

    @FunctionalInterface
    public interface IGetter<T, R> extends Serializable {
        R get(T t);
    }
}

实体类

import lombok.Data;

@Data
public class UserDto {
    private String userName;
    private int age;
    private boolean status;
}

测试

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import vip.gnloypp.learn.dto.UserDto;
import vip.gnloypp.learn.util.LambdaUtils;

@SpringBootTest
public class LambdaTests {

    @Test
    public void test() {
        System.out.println(LambdaUtils.convertToFieldName(UserDto::getUserName));
        System.out.println(LambdaUtils.convertToFieldName(UserDto::getAge));
        System.out.println(LambdaUtils.convertToFieldName(UserDto::isStatus));
    }
}

相关文章

  • 根据get或is方法获取参数名

    工具类 实体类 测试

  • Window.location.href传参问题

    window.location.href = “url?参数”+ 参数:传参方法为get传递,使用get获取,获取...

  • AFNetworking的用法

    此方法的GET和POST方法只能解析JSON数据 根据URL获取图片 button根据URL获取图片

  • js获取时间,循环执行任务,延迟执行任务

    一.获取时间 核心方法创建一个时间对象:new Date() 时间对象相关操作 时间对象.函数名 函数名功能get...

  • ERP-智能快递设置

    1.best/shipping/isSet 获取是否开启根据规则分派快递get 请求 无参返回: best/shi...

  • 根据位置取数据的方法

    根据位置取数据的方法 get(int index): 根据指定索引返回数据 获取头节点(index=0)数据方法:...

  • Restful API

    1、用复数名词,不能用动词,动词由CURD方法提供2、CURD操作方法有:GET: 获取资源POST: 新建资源P...

  • sys._getframe()

    1、获取调用者的函数名,两种方法 2、获取调用者的传参 输出:aaaaa 参考资料:https://blog.cs...

  • 2019-12-03 vue-axios的使用

    一、放在created中在线获取后台数据 1、无参 2、有参 二、导入方法,点击触发 get请求 post请求 专...

  • 获取元素

    DOM在我们实际开发中主要用来操作元素根据ID获取根据标签名获取通过HTML5新增的方法获取特殊元素获取 get ...

网友评论

      本文标题:根据get或is方法获取参数名

      本文链接:https://www.haomeiwen.com/subject/xjleoltx.html