首页 > 解决方案 > 如何在 parentInstances 中返回 childInstance 并使编译器和 linter 开心?

问题描述

我想Child从一个对象返回一个Parent对象。当我returnAsParent()在下面的示例代码中使用该方法时,runtimeType 和类型是预期的 a Child,但是 linter 和编译器不允许我调用例如在Childeg中定义的方法asParent.childFunc();

让编译器和 linter 满意的唯一方法是提供ChildTypevia 泛型并将返回值强制转换为它,如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();
  });
}

标签: dart

解决方案


推荐阅读