dart - 为什么 dart 类构造函数可以没有主体?

标签 dart constructor

我是 dart 新手,遇到了如下代码:

class Foo {
  Foo._internal();
  static final Foo instance = Foo._internal();
  // other stuff
}

我对函数 _internal 被调用两次(分别在第 2 行和第 3 行)感到困惑。 后来我意识到第一个实际上不是构造函数的调用而是定义。 只是定义的主体被省略了(恕我直言,这是一个非常糟糕的 Dart 语法规则)。

所以我的问题是,在什么情况下 dart 函数可以省略 body?

最佳答案

Dart 为构造函数提供了大量语法糖,包括使用分号代替空构造函数主体的能力。由于应尽可能首选初始化列表,因此构造函数具有空主体的情况并不少见,因此简写很有用。此外,redirecting constructorsconst constructors根本不允许有 body 。

构造函数不是函数,因此简写不适用于一般的函数和方法。 (作为构造函数和函数之间区别的另一个示例,只有构造函数可以与 newconst 一起使用。)对于方法,区分无主体和空主体很重要:

abstract class AbstractInterface {
  void mustBeOverridden();

  void optionallyOverridden() {}
}

我同意像 Foo._internal(); 这样的构造函数看起来很奇怪,但我认为这不是常见情况,因为它需要多个案例的交集才能使其看起来像一个方法调用:

  • 该类使用命名构造函数。
  • 该构造函数不带参数。
  • 该构造函数不使用初始值设定项列表。
  • 该构造函数不使用构造函数主体。

关于dart - 为什么 dart 类构造函数可以没有主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67327831/

相关文章:

dart - Flutter:滚动时ExpansionTile强制关闭

flutter - 可为空的表达式不能用作条件

c++ - 构造函数中的默认参数

c++ - 错误 : cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’

numbers - 使用 Dart 计算字符串中字母的个数

class - 是否从 Dart 中删除了 "interface"关键字?

flutter - CERTIFICATE_VERIFY_FAILED flutter

java - 如何使用继承和构造函数使用 1 个具有 2 个不同大小的数组

php - __call 魔法在 PHP 中创建新类

Java:通过同步实现公共(public)实例变量线程安全