Java8如何通过Function获取字段名
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,小编给大家分享一下Java8如何通过Function获取字段名,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法一:声明
千家信息网最后更新 2025年01月19日Java8如何通过Function获取字段名
小编给大家分享一下Java8如何通过Function获取字段名,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
方法一:
声明 String key1="aaa"; key为 key1,value 为map.get(key1);
Mapmap=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 SFunctionextends 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安全错误
数据库的锁怎样保障安全
web服务器登录
swift软件开发文档
软件开发一个app多少钱
软件开发防崩溃
pdb数据库打不开了
国外大的网络安全公司
电子商务和软件开发待遇
红河服务器上门回收中心
基础设施的网络安全保护
ctf网络安全大赛电视剧
全场景网络安全防护技术研究
游戏服务器端好做吗
sql 数据库代码
地下城堡2玩什么服务器好
网络安全技术课件免费下载
网络安全监管原则
级服务器
数据库avg.前面用什么
主流网络安全机制
智能制造网络技术 教材
软件开发完成的任务是什么
z10pad8服务器
数据库填补
伴伴网络技术
四川科技互联网院服
通过云服务器过滤广告
做网络安全有没有发展
青少年网络安全教育
新服务器装不上2012的系统
智能制造网络技术 教材