6

クラスタイプBがグルービーでクラスタイプAを拡張するかどうかを確認するには?

class A {
}

class B extends A {
}
4

3 に答える 3

14

Groovy の演算子は、右側の引数がクラスの場合にis ain関係をテストするため、Java の と同等です。これはオブジェクトにも機能します。と同等です。B in AA.isAssignableFrom(B)new C() in Anew 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
于 2013-09-27T20:18:07.777 に答える
2

関心のある直接継承だけの場合は、 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)
}
于 2013-09-27T14:23:41.740 に答える