我想在abstract class
中定义静态方法,但是遇到了问题。
在这个简单的例子中
abstract class Main {
static String get name;
bool use( Element el );
}
class Sub extends Main {
static String get name => 'testme';
bool use( Element el ) => (el is Element);
}
我收到错误:
function body expected for method 'get:name' static String get name;
声明中是否有错字,还是静态方法与抽象类不兼容?
最佳答案
Dart不会将静态方法继承到派生类。因此,创建抽象的静态方法(没有实现)是没有意义的。
如果要在Main
类中使用静态方法,则必须在其中完全定义它,并始终像Main.name
一样调用它
==编辑==
我确定我已阅读或听到Gilad Bracha提出的一些论点,但现在找不到。
这种行为是恕我直言,通常在静态类型的语言中很常见(我不知道许多动态语言)。静态方法类似于顶级函数,其中类名仅充当命名空间。静态方法与实例化对象无关,因此继承不适用。在“继承”静态方法的语言中,这只是语法糖。 Dart喜欢在这里更加明确,避免实例方法和静态方法(实际上不是方法,而是函数,因为它们不作用于实例)之间的混淆。这不是我的主要 Realm ,但希望仍然有一定道理;-)
关于class - 能否在Dart中的抽象类中声明静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20741737/