diff --git a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java
index 42c041ac1..1d040b686 100644
--- a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java
@@ -21,9 +21,11 @@ import java.lang.reflect.Type;
import java.net.URI;
import java.net.URL;
import java.time.temporal.TemporalAccessor;
+import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -686,4 +688,60 @@ public class ClassUtil {
}
return location.getPath();
}
+
+ /**
+ * 获取指定类的所有父类,结果不包括指定类本身
+ * 如果无父类,返回一个空的列表
+ *
+ * @param clazz 类, 可以为{@code null}
+ * @return 所有父类列表,参数为{@code null} 则返回{@code null}
+ */
+ public static List> getSuperClasses(final Class> clazz) {
+ if (clazz == null) {
+ return null;
+ }
+ final List> classes = new ArrayList<>();
+ Class> superclass = clazz.getSuperclass();
+ while (superclass != null) {
+ classes.add(superclass);
+ superclass = superclass.getSuperclass();
+ }
+ return classes;
+ }
+
+ /**
+ * 获取指定类及其父类所有的实现接口。
+ * 结果顺序取决于查找顺序,当前类在前,父类的接口在后。
+ *
+ * @param cls 被查找的类
+ * @return 接口列表,若提供的查找类为{@code null},返回{@code null}
+ */
+ public static List> getInterfaces(final Class> cls) {
+ if (cls == null) {
+ return null;
+ }
+
+ final LinkedHashSet> interfacesFound = new LinkedHashSet<>();
+ getInterfaces(cls, interfacesFound);
+
+ return new ArrayList<>(interfacesFound);
+ }
+
+ /**
+ * 获取指定类的的接口列表
+ *
+ * @param clazz 指定类
+ * @param interfacesFound 接口Set
+ */
+ private static void getInterfaces(Class> clazz, final HashSet> interfacesFound) {
+ while (clazz != null) {
+ for (final Class> i : clazz.getInterfaces()) {
+ if (interfacesFound.add(i)) {
+ getInterfaces(i, interfacesFound);
+ }
+ }
+
+ clazz = clazz.getSuperclass();
+ }
+ }
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/reflect/MethodUtil.java b/hutool-core/src/main/java/cn/hutool/core/reflect/MethodUtil.java
index 3e813f787..d5dffe169 100644
--- a/hutool-core/src/main/java/cn/hutool/core/reflect/MethodUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/reflect/MethodUtil.java
@@ -21,7 +21,8 @@ import java.util.List;
import java.util.Set;
/**
- * 反射中{@link Method}相关工具类,包括方法获取和方法执行
+ * 反射中{@link Method}相关工具类,包括方法获取和方法执行
+ * TODO 与commons-beanutils相比,Hutool缓存某个类的所有方法,而commons缓存单个方法,须性能测试哪个更加合理。
*
* @author looly
*/