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);
}

我收到错误:

方法‘Get:Name’应为函数体,静电字符串GET NAME;

声明中有没有拼写错误,或者静电方法与抽象类不兼容?

推荐答案

Dart不会将静态方法继承给派生类.因此,创建抽象静态方法(没有实现)是没有意义的.

如果您希望在第Main类中使用静电方法,则必须在那里对其进行完全定义,并始终使用类似于Main.name的调用方式

==编辑==

我肯定我从吉拉德·布拉查那里读到或听到过一些关于这件事的争论,但现在找不到了.

这种行为主要在静态类型的语言中很常见(我知道的动态语言不多).静电方法类似于顶级函数,其中类名只是充当命名空间.静电方法与实例化的对象无关,因此继承不适用.在静电方法是"继承"的语言中,这只是语法上的糖.DART喜欢在这里更加明确,避免在实例方法和念力方法之间使用静电方法(它们实际上不是方法,而仅仅是函数,因为它们不作用于实例).这不是我的主要领域,但希望无论如何都能有一些意义;-)

Dart相关问答推荐

异类列表中函数类型不变性的解决方法

如何在 Dart 2.17+ 中处理future 的枚举值

如何在Flutter中制作视频缩略图?

Flutter - MultiProvider 如何与相同类型的提供者一起工作?

Flutter 错误:主体可能正常完成,导致返回null,但返回类型可能是不可为空的类型

如何实现 Iterable

Flutter:合并两张图片,作为单张图片存储在本地存储中

Flutter DatePicker 没有day选项

在 Flutter 中保持响应的同时制作持久的背景图像

判断无状态小部件是否在Flatter中处理

如何在Flutter中返回异步函数的值?

Flutter Text 小部件中的 StrutStyle 是什么

Flatter Container()与SizedBox()的虚拟空容器

如何左对齐 Flutter 中的 OutlineButton 图标

在小部件上显示对话框

在 Dart 中调用异步函数而不等待,例如启动一个线程

如何从列表中的元素创建逗号分隔的字符串

Dart 转换列表的每个元素

找不到名为pubspec.yaml的文件

将方法或值添加到 dart 中的枚举