在flutter源代码中有一个名为containerrenderObjectMixin的mixin(在object.dart文件中),它使用的是泛型,这会让我困惑吗?
这样地:

class ParentData {
  ...
}

abstract class RenderObject {
  ParentData parentData;
  ...
}

mixin ContainerParentDataMixin<ChildType extends RenderObject> on ParentData {
  ...
}

mixin ContainerRenderObjectMixin<ChildType extends RenderObject, ParentDataType extends ContainerParentDataMixin<ChildType>> on RenderObject {
  bool _debugUltimatePreviousSiblingOf(ChildType child, { ChildType equals }) {
    ParentDataType childParentData = child.parentData;
    while (childParentData.previousSibling != null) {
      assert(childParentData.previousSibling != child);
      child = childParentData.previousSibling;
      childParentData = child.parentData;
    }
    return child == equals;
  }
  ...
}

我不知道DART如何确认这段代码[parentdata type child parentdata=child.parentdata],为什么parentdata的类型是parentdatatype?我认为parentdata的类型可以是parentdata的任何子类。
我不熟悉DART,有人能告诉我为什么这个代码没有错误吗?

最佳答案

这不是“类型安全”,如果你是这么想的话。
他们将child.parentDataParentData铸造到ParentDataType
但这不会导致问题,因为在代码范围内,“保证”parentdatatype。
child.parentData是合同的一部分。

10-06 09:38