[java]クラスの継承チェック

  未分類

クラス同士の継承関係をチェックする。

/**
 * クラス同士の継承関係をチェックする
 * @param c1 ターゲットのクラス
 * @param c2 親クラス
 * @return c1がc2を継承しているときtrue
 */
boolean check(Class c1, Class c2) {
    for (Class x = c1.getSuperclass(); ; x = x.getSuperclass()) {
        if (x == c2) return true;
        if (x == Object.class) break;
    }
    return false;
}

使用例(groovy)

class A { }
class B extends A { }
class C extends B { }

println check(A.class, B.class)
println check(B.class, A.class)
println check(C.class, A.class)
println check(C.class, Object.class)

実行結果

false
true
true
true

あとから動的にロードしたクラスだとクラス比較でFalseとなってしまうことがあるようです。その場合はname同士の比較とするなど ケースバイケースで工夫が必要です。

LEAVE A COMMENT