class - 能否在Dart中的抽象类中声明静态方法?

标签 class static dart abstract

我想在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/

相关文章:

java - Java中的静态最终变量

flutter - Flutter:区分小部件参数= null和未设置的参数

python - python 中 try 和 except 的使用

class - 在 ant 脚本中包含作为类文件分发的库

python - 属性错误: 'property' object has no attribute

flutter - Dart 依赖注入(inject) - 为什么我不能将实例引用传递给类成员?

flutter - 如何在上下文中的Flutter中结合DropdownMenu和AppLocalization?

Java OOP 公共(public)、私有(private)、 protected

c - 在这种情况下比较字符串指针是否有效?

c++ - 类自身类型的静态类成员