1

飞镖代码:

main() {
    var child1 = new Child1();
    var t = child1.childType();
}

class Parent {
    ??? childType() {
        return this.runtimeType;
    }
}

class Child1 extends Parent {
}

class Child2 extends Parent {
}

您可以看到???in class Parent,我希望它引用孩子的类型,但我不知道如何声明它。

在 scala 中,它可以是:

def childType(): this.type = {
    ...
}

但我不知道如何在飞镖中做到这一点。可能吗?如果不可能,这里最好使用什么类型?

4

1 回答 1

3

如果您确实需要将返回类型childType静态声明为正确的子类型,则可以使用泛型:

class Parent<C extends Parent> {
  C get childType => runtimeType;
}

class Child1 extends Parent<Child1> {}

class Child2 extends Parent<Child2> {}

不过,我真的会确保你需要那个。你可以继续childType输入为Parent.

于 2013-07-27T05:33:56.317 回答