クラスタイプBがグルービーでクラスタイプAを拡張するかどうかを確認するには?
class A {
}
class B extends A {
}
Groovy の演算子は、右側の引数がクラスの場合にis ain
関係をテストするため、Java の と同等です。これはオブジェクトにも機能します。と同等です。B in A
A.isAssignableFrom(B)
new C() in A
new C() instanceof A
class A {}
class B extends A {}
class C extends B {}
assert C in A // C inherits from A
interface I {}
interface J extends I{}
assert J in I // J extends I
class D implements I {}
assert D in I // D implements I
final o = new C()
assert o in A // o is an instance of A
関心のある直接継承だけの場合は、 java.lang.Class'getSuperclass
メソッドがそのトリックを実行する必要があります。
assert B.superclass == A
@Grzegorzの回答に少しGroovyの魔法を適用すると、これを実行して、より読みやすいメソッドを Class タイプに追加できます。
class ClassHelper {
static boolean extendsFrom(Class sub, cls) {
cls.isAssignableFrom(sub)
}
}
class A {
}
class B extends A {
}
class C extends B {
}
use(ClassHelper) {
assert B.extendsFrom(A)
assert C.extendsFrom(B)
assert C.extendsFrom(A)
assert !B.extendsFrom(C)
}