S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

継承している全てのスーパークラスと実装している全てのインターフェースを取得する

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;
    }
}