KeyFlutter 中的类有一个构造factory函数,其工作方式更像变量。
abstract class Key {
const factory Key(String value) = ValueKey<String>;
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到错误:
class Foo {
Foo.empty();
const factory Foo(int i) = Bar; // Error
}
class Bar extends Foo {
Bar() : super.empty();
}
Run Code Online (Sandbox Code Playgroud)
其实我不太明白这个工厂构造函数暨变量有什么用。谁能解释一下。
jam*_*lin 10
一个构造函数如:
const factory Key(String value) = ValueKey<String>;
Run Code Online (Sandbox Code Playgroud)
称为重定向工厂构造函数。它们并不广为人知(即使在 Dart 和 Flutter 团队中),因为Dart 语言教程 中没有提及它们,但在Dart 语言规范(截至版本 2.10)第 10.6.2 节中提到了它们:
重定向工厂构造函数指定对另一个类的构造函数的调用,每当调用重定向构造函数时都会使用该类的构造函数。
您尝试使用它们:
Run Code Online (Sandbox Code Playgroud)const factory Foo(int i) = Bar; // Error
不起作用有两个原因:
Foo工厂构造函数声明为const,但默认Bar构造函数不是const。const从工厂构造函数中删除Foo或创建Bar默认构造函数const(这也需要创建Foo.empty构造函数const)。=,您没有机会指定如何传递参数。这是因为重定向工厂构造函数要求两个构造函数具有相同的参数。从工厂构造函数中删除未使用的参数Foo,或者 makeBar的构造函数int也接受一个参数。您应该注意静态分析中出现的错误;他们解释了上述两个问题。在 DartPad 中,我得到:
常量重定向构造函数无法重定向到非常量构造函数。
和
重定向的构造函数“Bar Function()”具有与“Foo Function(int)”不兼容的参数。
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |