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;
}