[英]Dart/Flutter - Call constructor of unknown concrete class (get class from Type)
[英]Dart - Get current type of the class
我想创建一个 class 并参考“当前类的类型” 。
因此,例如在这个小片段中,我创建了一个具有.child
的 class A
。
如其所写, .child
( A?
) 的类型是“硬编码”的,我的意思是,如果我创建扩展A
B
, .child
将是A?
. 我希望它自动成为B?
“因为当前 class 是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?'.
有没有办法做我想做的事? 如果是,如何?
一种方法是使用 generics 并从 C++ 借用奇怪重复的模板模式,以便基础 class 知道派生类的类型:
class A<Derived extends A<Derived>> {
Derived? child;
}
class B extends A<B> {
}
或者,您可以将A
设为抽象 class 并让B
覆盖child
项:
abstract class A {
A? get child;
}
class B extends A {
@override
B? child;
}
如果A
需要一个 setter 的child
,您可以使用covariant
来安抚 static 分析并允许在运行时检查 setter 的值:
abstract class A {
A? get child;
set child(A? value);
}
class B extends A {
@override
covariant B? child;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.