ReflectUtil:
/*************************** *<pre> * @Package : com.sea.xx.test * @File Name : ReflectUtil * @Author : Sea * @Date : 9/28/22 11:23 AM * @Purpose : * @History : *</pre> ***************************/ import com.google.common.collect.Maps; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; public class ReflectUtil { /** * custom commmon field type */ public static String[] commonFieldType = { "int", "long", "short", "double", "float", "char", "byte", "boolean", "class java.lang.String", "class java.lang.Integer", "class java.lang.Long", "class java.lang.Short", "class java.lang.Double", "class java.lang.Float", "class java.lang.Byte", "class java.lang.Boolean", "class java.math.BigDecimal" }; /** * 获取类的私有属性 : eg:name * @param objClss * @param fileName * @throws Exception */ public static Object getFiledValue(Object objClss, String fileName) throws Exception { Field name = objClss.getClass().getDeclaredField(fileName); name.setAccessible(true); Object o = name.get(objClss); return o; } /** * @param obj * @param methodName * @param args * @param parameterTypes * @return * @throws Exception */ public static Object runMethod(Object obj, String methodName, Object args,Class<?>... parameterTypes) throws Exception { Method declaredMethod = obj.getClass().getDeclaredMethod(methodName, parameterTypes); declaredMethod.setAccessible(true); Object invoke = declaredMethod.invoke(obj, args); return invoke; } /** * 获取类的所有字段以及值 * @param t * @param <T> * @return */ public static <T> Map<String, Object> getKeyAndValue(T t) { Map<String, Object> map = Maps.newHashMap(); Class clazz = (Class) t.getClass(); Field[] fields = clazz.getDeclaredFields(); map = Arrays.stream(fields).collect(Collectors.toMap(Field::getName, field -> { Object resultObj = null; field.setAccessible(true); try { resultObj = field.get(t); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return Optional.ofNullable(resultObj).orElse(0); }, (k1, k2) -> k2)); return map; } /** * 获取最简类名(去除包名)<br> * eg : com.csdn.util.ReflectUtil > ReflectUtil * @param className * @return simpleClassName */ public static String getSimpleClassName(String className) { return className.substring(className.lastIndexOf(".") + 1); } /** * @param obj * @param fileName * @param value * @throws Exception */ public static void setFiledValue(Object obj, String fileName, Object value) throws Exception { Field name = obj.getClass().getDeclaredField(fileName); name.setAccessible(true); name.set(obj,value); } /** * 判断指定对象中的指定属性名的类型是否属于自定义普通数据类型 * @param obj 指定对象 * @param fieldName 指定属性名 * @return */ public static boolean isCommonTypeField(Object obj, String fieldName) { boolean result = false; try { Field field = obj.getClass().getDeclaredField(fieldName); String type = field.getGenericType().toString(); for ( int i = 0; i < commonFieldType.length; i++ ) { if ( commonFieldType[i].equals(type) ) { result = true; break; } } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取指定类的所有属性名 * @param className 指定类全名 * @return 所有属性名 */ public static String[] getAllFieldName(String className) { String[] fieldName = null; try { Field[] fields = Class.forName(className).getDeclaredFields(); fieldName = new String[fields.length]; for ( int i = 0; i < fields.length; i++ ) { fieldName[i] = fields[i].getName(); } } catch (Exception e) { e.printStackTrace(); } return fieldName; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?