Dart - 获取 class 的当前类型
Dart - Get current type of the class
我想创建一个class并参考当前class的类型.
例如,在这个小片段中,我创建了一个 class A
,其中包含 .child
.
正如所写,.child
(A?
) 的类型是 "hardcoded",我的意思是,如果我创建 [=扩展 A
、.child
的 17=] 将属于 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?'.
有没有办法做我想做的事?如果是,如何?
一种方法是使用泛型并从 C++ 中借用 curiously-recurring template pattern,以便基础 class 知道派生的 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
安抚静态分析并允许 setter 的值是在运行时检查:
abstract class A {
A? get child;
set child(A? value);
}
class B extends A {
@override
covariant B? child;
}
我想创建一个class并参考当前class的类型.
例如,在这个小片段中,我创建了一个 class A
,其中包含 .child
.
正如所写,.child
(A?
) 的类型是 "hardcoded",我的意思是,如果我创建 [=扩展 A
、.child
的 17=] 将属于 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?'.
有没有办法做我想做的事?如果是,如何?
一种方法是使用泛型并从 C++ 中借用 curiously-recurring template pattern,以便基础 class 知道派生的 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
安抚静态分析并允许 setter 的值是在运行时检查:
abstract class A {
A? get child;
set child(A? value);
}
class B extends A {
@override
covariant B? child;
}