Java 根據反射機制操作實體欄位FieldUtil
阿新 • • 發佈:2020-07-30
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; /** * TODO */ public class FiledUtil { /* 根據bean獲取所有欄位資訊 */ public List<Field> getFieldList(String bean) { List<Field> fieldList = new ArrayList<>(); try { Class<?> clz = Class.forName(bean); Field[] strsSub = clz.getDeclaredFields(); Class<?> clzSuper = Class.forName(bean).getSuperclass(); for (Field filed : strsSub) { fieldList.add(filed); } if (null != clzSuper) { Field[] strsSuper = clzSuper.getDeclaredFields(); for (Field filed : strsSuper) { fieldList.add(filed); } } } catch (Exception e) { ExceptUtils.printStackTrace(e); } return fieldList; } /* * 根據屬性名獲取屬性值 */ public Object getFieldValueByName(String fieldName, Object obj) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = obj.getClass().getMethod(getter, new Class[] {}); method.setAccessible(true); Object value = method.invoke(obj, new Object[] {}); return value; } catch (Exception e) { ExceptUtils.printStackTrace(e); } return null; } /* 根據欄位設定物件對應欄位值 */ public void setObjFieldValueByName(Object obj, String fieldName, Object fieldValue) { String bean = obj.getClass().getName(); List<Field> fieldList = getFieldList(bean); for (Field field : fieldList) { if (!fieldName.equals(field.getName())) { continue; } field.setAccessible(true); try { field.set(obj, fieldValue); } catch (IllegalAccessException e) { ExceptUtils.printStackTrace(e); } } } }