我看过这段代码,有人能给我解释一下AppTheme._()
是什么意思吗?因为我在dart中读到过它的单例类,但我真的不明白它是如何工作的。
class AppTheme {
AppTheme._();
static const Color notWhite = Color(0xFFEDF0F2);
static const Color nearlyWhite = Color(0xFFFEFEFE);
static const Color white = Color(0xFFFFFFFF);
static const Color nearlyBlack = Color(0xFF213333);
...
}
3条答案
按热度按时间zd287kbt1#
AppTheme._();
是一个命名构造函数(另一个例子可能是Flutter框架中某些对象的复制构造函数:ThemeData.copy(...);
)。在dart中,如果前导字符是下划线,则函数/构造函数是库私有的。这里的情况也是如此,下划线也是唯一的字符,所以我想写这个构造函数的人根本没有计划调用这个构造函数。
AppTheme._();
不是必需的,除非您不希望AppTheme意外地使用隐式默认构造函数示例化。50few1ms2#
这是为了使类不可示例化。
更多信息请参见https://www.woolha.com/tutorials/dart-prevent-instantiation-of-class#:~:text=Creating%20Private%20Constructor%20to%20Prevent,(下划线)%20which%20means%20private.
此外,我认为这总结了为什么我们首先需要它“如果一个类有一个或多个私有构造函数,而没有公共构造函数,其他类(除了嵌套类)不能创建这个类的示例。“来自https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/private-constructors
pxy2qtax3#
要在Dart中创建不可示例化的类,可以使用工厂构造函数沿着私有命名构造函数。示例如下:
**在本例中,**private named constructor _()防止类从类本身外部示例化。工厂构造函数用于在尝试示例化类时抛出UnsupportedError,指示它不能被示例化。
现在,每次尝试创建NonInstantiableClass的示例时,都会抛出错误:
这种方法确保类不能被示例化,并有效地使其不可示例化。