繁体   English   中英

Dart - 获取 class 的当前类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM