【发布时间】:2019-07-11 09:31:32
【问题描述】:
在 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怎么确认这个code[ParentDataType childParentData = child.parentData],为什么parentData的Type是ParentDataType?我认为 parentData 的 Type 可以是 ParentData 的任何子类。
我对 Dart 不熟悉,谁能告诉我为什么这段代码不会出错?
【问题讨论】: