如何解决Dart - 获取当前类的类型
我想创建一个类并引用“当前类的类型”。
例如,在这个小片段中,我创建了一个 A
类,其中包含 .child
。
正如它所写的那样,.child
(A?
) 的类型是“硬编码”,我的意思是,如果我创建 B
扩展A
、.child
的类型为 A?
。我希望它自动成为 B?
"因为当前类是 B
"。
class A {
A? child;
}
class B extends A {
}
B? f(B b) {
return b.child;
}
就像现在一样,它显示了错误
line 10 • A value of type 'A?' can't be returned from the function 'f' because it has a return type of 'B?'.
有没有办法做我想做的事?如果是,如何?
解决方法
一种方法是使用泛型并从 C++ 中借用 curiously-recurring template pattern,以便基类知道派生类的类型:
class A<Derived extends A<Derived>> {
Derived? child;
}
class B extends A<B> {
}
或者,您可以将 A
设为抽象类并让 B
覆盖 child
:
abstract class A {
A? get child;
}
class B extends A {
@override
B? child;
}
如果 A
需要 child
的 setter,您可以使用 covariant
来安抚静态分析并允许在运行时检查 setter 的值:
abstract class A {
A? get child;
set child(A? value);
}
class B extends A {
@override
covariant B? child;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。