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