我可以在继承类上获取父级名称(第一个)



示例我有三个类:视图,fview(扩展视图)和mview(扩展视图)。我有类型Mview的变量,并希望根据父类视图对其进行检查(即,如果此变量来自类视图)。是否可以获得父班(查看类)?。这是完整的示例:https://try.haxe.org/#ea594

class Test {
    static function main() {
        var v = new SView();
        trace(Type.getClassName( Type.getSuperClass(Type.getClass(v))) );
    }
}

类视图:

class View {
    public function new() {
    }
}

类fview:

class FView  extends View { 
    public function new() {
        super();
    }
}

类Sview:

class SView  extends FView {
    public function new() {
        super();
    }
}

如果要上基类,则可以重复或迭代,直到 Type.getSuperClass()返回 null

// at runtime: find out what is the base class of `v`
var base:Class<Dynamic> = Type.getClass(v);
while (true) {
    var s = Type.getSuperClass(base);
    if (s == null)
        break;
    base = s;
}
trace(Type.getClassName(base));

但是,您提到您只想检查MView(或SView)是否为View类型。

好吧,为此,有一些简单的替代品...

首先,在编译类型上,您只需使用类型检查(或分配)即可检查v:SView是否与View统一:

// at compile time: enforce that `v` be of type `View` or compatible with it
var v1 = (v:View);  // use a type check
var v2:View = v;    // or simply pass it to something expecting `View`

如果您需要在运行时执行此操作,则可以使用Std.is()

// at runtime: check if `v` is a subclass instance of `View`
trace(Std.is(v, View));

有关一个完整的示例,请查看此尝试HAXE实例。

相关内容

最新更新