千家信息网

Java8如何通过Function获取字段名

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Java8如何通过Function获取字段名,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法一:声明
千家信息网最后更新 2026年11月02日Java8如何通过Function获取字段名

小编给大家分享一下Java8如何通过Function获取字段名,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

方法一:

声明 String key1="aaa"; key为 key1,value 为map.get(key1);

Map map=new HashMap<>();        map.put("aaa",1);        //获取map的key 和value        //key 为key1        String key1="aaa";        //value 为 map.get(key1)        map.get(key1);

然后好像日常使用中也没有其他的方法了,下面将带来另外一种使用方法,话不多说直接上代码[/code]

import java.io.Serializable;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.invoke.SerializedLambda;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.function.Function;/** * Java8通过Function函数获取字段名称(获取实体类的字段名称) * @see ColumnUtil#main(java.lang.String[]) 使用示例 * @author jx */public class ColumnUtil {    /**     * 使Function获取序列化能力     */    @FunctionalInterface    public interface SFunction extends Function, Serializable {    }    /**     * 字段名注解,声明表字段     */    @Target(ElementType.FIELD)    @Retention(RetentionPolicy.RUNTIME)    public @interface TableField {        String value() default "";    }    //默认配置    static String defaultSplit = "";    static Integer defaultToType = 0;    /**     * 获取实体类的字段名称(实体声明的字段名称)     */    public static  String getFieldName(SFunction fn) {        return getFieldName(fn, defaultSplit);    }    /**     * 获取实体类的字段名称     * @param split 分隔符,多个字母自定义分隔符     */    public static  String getFieldName(SFunction fn, String split) {        return getFieldName(fn, split, defaultToType);    }    /**     * 获取实体类的字段名称     * @param split 分隔符,多个字母自定义分隔符     * @param toType 转换方式,多个字母以大小写方式返回 0.不做转换 1.大写 2.小写     */    public static  String getFieldName(SFunction fn, String split, Integer toType) {        SerializedLambda serializedLambda = getSerializedLambda(fn);        // 从lambda信息取出method、field、class等        String fieldName = serializedLambda.getImplMethodName().substring("get".length());        fieldName = fieldName.replaceFirst(fieldName.charAt(0) + "", (fieldName.charAt(0) + "").toLowerCase());        Field field;        try {            field = Class.forName(serializedLambda.getImplClass().replace("/", ".")).getDeclaredField(fieldName);        } catch (ClassNotFoundException | NoSuchFieldException e) {            throw new RuntimeException(e);        }        // 从field取出字段名,可以根据实际情况调整        TableField tableField = field.getAnnotation(TableField.class);        if (tableField != null && tableField.value().length() > 0) {            return tableField.value();        } else {            //0.不做转换 1.大写 2.小写            switch (toType) {                case 1:                    return fieldName.replaceAll("[A-Z]", split + "$0").toUpperCase();                case 2:                    return fieldName.replaceAll("[A-Z]", split + "$0").toLowerCase();                default:                    return fieldName.replaceAll("[A-Z]", split + "$0");            }        }    }    private static  SerializedLambda getSerializedLambda(SFunction fn) {        // 从function取出序列化方法        Method writeReplaceMethod;        try {            writeReplaceMethod = fn.getClass().getDeclaredMethod("writeReplace");        } catch (NoSuchMethodException e) {            throw new RuntimeException(e);        }        // 从序列化方法取出序列化的lambda信息        boolean isAccessible = writeReplaceMethod.isAccessible();        writeReplaceMethod.setAccessible(true);        SerializedLambda serializedLambda;        try {            serializedLambda = (SerializedLambda) writeReplaceMethod.invoke(fn);        } catch (IllegalAccessException | InvocationTargetException e) {            throw new RuntimeException(e);        }        writeReplaceMethod.setAccessible(isAccessible);        return serializedLambda;    }    /**     * 测试用户实体类     */    public static class TestUserDemo implements Serializable {        private static final long serialVersionUID = 1L;        private String loginName;        private String name;        private String companySimpleName;        @ColumnUtil.TableField("nick")        private String nickName;        public String getLoginName() {            return loginName;        }        public void setLoginName(String loginName) {            this.loginName = loginName;        }        public String getNickName() {            return nickName;        }        public void setNickName(String nickName) {            this.nickName = nickName;        }        public static long getSerialVersionUID() {            return serialVersionUID;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        public String getCompanySimpleName() {            return companySimpleName;        }        public void setCompanySimpleName(String companySimpleName) {            this.companySimpleName = companySimpleName;        }    }    /**     * 参考示例     */    public static void main(String[] args) {        //实体类原字段名称返回        System.out.println();        System.out.println("实体类原字段名称返回");        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getLoginName));        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getNickName));        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getCompanySimpleName));        System.out.println();        System.out.println("实体类字段名称增加分隔符");        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getCompanySimpleName, "_"));        System.out.println();        System.out.println("实体类字段名称增加分隔符 + 大小写");        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getCompanySimpleName, "_", 0));        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getCompanySimpleName, "_", 1));        System.out.println("字段名:" + ColumnUtil.getFieldName(TestUserDemo::getCompanySimpleName, "_", 2));    }}

输出结果:

以上是"Java8如何通过Function获取字段名"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

字段 名称 实体 分隔符 方法 序列 多个 字母 篇文章 信息 内容 大写 大小 小写 方式 示例 参考 不怎么 代码 使用方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 百单互联网科技有限公司 互联网前沿科技 天扬科技互联网广告 互联网实体化科技化 互联网科技创新服务 互联网为啥属于高科技 港股科技和互联网 花神(南京)互联网科技有限公司 宜昌元轩互联网科技有限公司 广州市恰铎互联网科技有限公司 银川新华互联网科技学校联系电话 乌鲁木齐新华智原互联网科技学校 风投北京互联网科技 互联网科技平台产品运营 科技互联网公司两年变化 盐城市攀科互联网科技有限公司 华人运通互联网科技公司 互联网的黑科技实验室 互联网科技企业文化 互联网科技产业 互联网科技保险 互联网扶贫科技 互联网科技公司有哪些 华脉科技工业互联网产品 北京华百购互联网科技有限公司 上海互联网科技公司ppt 上海同邻互联网科技有限公司规模 互联网科技品牌 互联网科技大佬云集
0