在任何类之外声明变量:为什么可能

use*_*291 3 dart flutter

我有一个fancy_button.dart自定义 Flutter 小部件的文件,FancyButton如下所示:

class FancyButton extends StatefulWidget {
    // ...
}

class _FancyButtonState extends State<FancyButton> {
    // ...
}

// Declaration outside any class:

Map<_FancyButtonState, Color> _buttonColors = {};

final _random = Random();

int next(int min, int max) => min + _random.nextInt(max - min);

// ...
Run Code Online (Sandbox Code Playgroud)

该应用程序运行良好。请注意,我在任何类之外声明并使用了一些变量。现在我的问题是:这怎么可能?不应该所有东西都在 Dart 的一个类中,比如 Java?

jul*_*101 5

不,Dart 支持在全局空间中定义的变量和函数。您可以通过main()在任何类之外声明的方法看到这一点。

此外,全局变量(和静态类变量)是惰性计算的,因此在您尝试使用它们时首先定义该值。因此,即使有一堆未使用的全局变量,您的运行时也不会变慢。

  • @Aegletes我有Java背景,所以我不太喜欢使用全局变量。这种延迟加载行为对于类中的静态变量也有效,这是我大多数时间所做的。 (2认同)