dart - 如何在 parentInstances 中返回 childInstance 并使编译器和 linter 开心?
问题描述
我想Child
从一个对象返回一个Parent
对象。当我returnAsParent()
在下面的示例代码中使用该方法时,runtimeType 和类型是预期的 a Child
,但是 linter 和编译器不允许我调用例如在Child
eg中定义的方法asParent.childFunc();
。
让编译器和 linter 满意的唯一方法是提供ChildType
via 泛型并将返回值强制转换为它,如returnAsChild()
.
有没有更好的方法来实现这一点?
import 'package:test/test.dart';
class Parent<ChildType> {
ChildType returnAsChild() {
return this as ChildType;
}
Parent returnAsParent() {
return this;
}
}
class Child extends Parent<Child> {
void childFunc() {
print('childfunc');
}
}
void main() {
test('Test Objects', () {
var c = Child();
var asChild = c.returnAsChild();
var asParent = c.returnAsParent();
expect(asChild is Child, true);
expect(asParent is Child, true);
print('asChild.runtimeType ${asChild.runtimeType}');
print('asParent.runtimeType ${asParent.runtimeType}');
asChild.childFunc();
// asParent.childFunc();
});
}
解决方案
推荐阅读
- java - Qpid JMS:接收文本消息导致转换异常
- directx-11 - 当对象在世界空间中移动时,XMVector3Project 给出偏移值
- python - 使用 pandas apply() 时如何在列中返回函数的名称?
- amazon-web-services - 如何使用 AWS CLI 了解 RDS 免费存储?
- php - 在 apache 配置文件中将数组设置为环境变量的值
- angular - 如何在 ag-Grid 的单元格内渲染 Angular routerLink?
- c# - 阅读器不断返回 System.Data.SqlDataReader
- python - 如何在 Python 中获取 PowerBI 的当前工作目录?
- php - 如何使用 PHP 实现这种关系?
- symfony - 访问模板中的属性时查询生成器错误