From 6bbd8451fb4e573902ff2b99925eeb81c13b4e64 Mon Sep 17 00:00:00 2001 From: QunXingShanShuo Date: Fri, 8 Oct 2021 17:14:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ReflectUtil=E4=B8=AD=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=9D=A1=E4=BB=B6=E8=BF=87=E6=BB=A4=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReflectUtil中加入通过条件过滤选择属性 --- .../java/cn/hutool/core/util/ReflectUtil.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java index 39afaaaac..6f97a386b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java @@ -15,13 +15,7 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * 反射工具类 @@ -188,6 +182,24 @@ public class ReflectUtil { return FIELDS_CACHE.put(beanClass, allFields); } + + /** + * 获得一个类中所有满足条件的字段列表,包括其父类中的字段
+ * 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。 + * + * @param beanClass 类 + * @param fieldFilter field过滤器,过滤掉不需要的field + * @return 字段列表 + * @throws SecurityException 安全检查异常 + */ + public static Field[] getFields(Class beanClass, Filter fieldFilter) throws SecurityException { + final Field[] fields = getFields(beanClass); + if (ArrayUtil.isEmpty(fields)) { + return fields; + } + return ArrayUtil.filter(fields, fieldFilter); + } + /** * 获得一个类中所有字段列表,直接反射获取,无缓存
* 如果子类与父类中存在同名字段,则这两个字段同时存在,子类字段在前,父类字段在后。 @@ -917,7 +929,7 @@ public class ReflectUtil { } } - if(method.isDefault()){ + if (method.isDefault()) { // 当方法是default方法时,尤其对象是代理对象,需使用句柄方式执行 // 代理对象情况下调用method.invoke会导致循环引用执行,最终栈溢出 return MethodHandleUtil.invokeSpecial(obj, method, args);