我想在Dart中创建一个 静态 扩展方法 (它是自动生成的,所以我不能轻易修改它)。根据文档,这应该是可能的。
扩展也可以有静态字段和静态辅助方法。
然而,即使是这个小例子也不能编译。
extension Foo on String {
static String foo() => 'foo!';
}
void main() {
print(String.foo());
}
Error: Method not found: 'String.foo'.
print(String.foo());
^^^
我到底做错了什么?
文档的意思是,扩展类 自己 可以有 static
字段和助记方法。 这些不会是扩展类的扩展。 也就是说,在你的例子中。Foo.foo()
是合法的,但 String.foo()
不是。
你目前不能创建属于 static
. 见 https:/github.comdart-langlanguageissues723。.
注意,你也可能会看到Dart扩展方法被称为 "静态扩展方法",但那里的 "静态 "意味着扩展是静态应用的(即基于编译时已知的对象类型,而不是运行时的类型)。
正如James所提到的,从目前来看,你不能直接在扩展类上使用静态方法,目前解决你的问题的方法是。
extension Foo on String {
String foo() => 'foo!';
}
void main() {
print('Hi'.foo());
}