java.lang.ClassのgetSuperclassとかgetInterfacesは、Declaredなメソッドみたいなので。
まぁフレームワークの実装覗けばありそうだったけど、書いても知れてると思ったのでコード書いてみた。
で、書いてみて「普通の開発担当者は使ってほしくないなぁ〜」とか。
import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ClassUtil implements Serializable { private static final long serialVersionUID = 2149706077254217217L; public ClassUtil() { super(); } public static List getSuperclassListForObject(Object obj) { return getSuperclassList(obj.getClass()); } public static List getSuperclassList(Class c) { List ret = new ArrayList(); Class tmp = c; while (true) { tmp = tmp.getSuperclass(); if (tmp == null) { break; } ret.add(tmp); } return ret; } public static List getInterfaceListForObject(Object obj) { return getInterfaceList(obj.getClass()); } public static List getInterfaceList(Class c) { List ret = new ArrayList(); Class tmp = c; ret.addAll(Arrays.asList(tmp.getInterfaces())); while (true) { tmp = tmp.getSuperclass(); if (tmp == null) { break; } ret.addAll(Arrays.asList(tmp.getInterfaces())); } return ret; } }