From 2cfb33af9eeac7869e180c496ac1c427f77fa903 Mon Sep 17 00:00:00 2001 From: jiazhengquan <2466896229@qq.com> Date: Tue, 8 Mar 2022 18:01:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4WUWR=E5=88=9D?= =?UTF-8?q?=E7=89=88=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/util/ReflectUtil.java | 33 ++++++++++++++----- 1 file changed, 25 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 de406bfbf..4f9ded9d2 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 @@ -663,18 +663,35 @@ public class ReflectUtil { Assert.notNull(beanClass); Method[] allMethods = null; + Class[] searchInterfaces = null, parentInterfaces = null; Class searchType = beanClass; Method[] declaredMethods; - while (searchType != null) { - declaredMethods = searchType.getDeclaredMethods(); - if (null == allMethods) { - allMethods = declaredMethods; - } else { - allMethods = ArrayUtil.append(allMethods, declaredMethods); + while (searchType != null || searchInterfaces != null) { + if (searchType != null) { + declaredMethods = searchType.getDeclaredMethods(); + if (null == allMethods) { + allMethods = declaredMethods; + } else { + allMethods = ArrayUtil.append(allMethods, declaredMethods); + } + Class[] interfaces = searchType.getInterfaces(); + for (Class element : interfaces) { + allMethods = ArrayUtil.append(allMethods, element.getDeclaredMethods()); + parentInterfaces = ArrayUtil.addAll(element.getInterfaces()); + } + searchInterfaces = parentInterfaces; + Class[] classes = searchInterfaces.length == 0 ? null : searchInterfaces; + searchInterfaces = withSuperClassMethods ? classes : null; + searchType = withSuperClassMethods ? searchType.getSuperclass() : null; + } + if (searchInterfaces != null) { + for (Class searchInterface : searchInterfaces) { + allMethods = ArrayUtil.append(allMethods, searchInterface.getDeclaredMethods()); + parentInterfaces = ArrayUtil.addAll(searchInterface.getInterfaces()); + } + searchInterfaces = parentInterfaces.length == 0 ? null : parentInterfaces; } - searchType = withSuperClassMethods ? searchType.getSuperclass() : null; } - return allMethods; }