🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 通过声明与类具有相同名称的函数以及可选的附加标识符来创建Dart构造函数。后者称为命名构造函数。 ## 优先定义构造函数而不是静态方法来创建实例。 构造函数使用new或调用const,它传达调用的主要目的是返回类的实例(或至少是实现其接口的东西)。 您永远不需要使用静态方法来创建实例。命名构造函数允许您阐明如何创建对象,工厂构造函数允许您在适当时构造子类或子接口的实例。 尽管如此,一些技术上创建新对象的方法并不像“类似构造函数”。例如,Uri.parse()即使它从给定的参数创建一个新URI ,也是一个静态方法。同样,使用静态方法可以更好地读取实现Builder模式的类。 但是,在大多数情况下,你应该使用构造函数,即使它更冗长。当用户想要一个新的类实例时,他们希望构造函数是创建一个实例的常规方法。 ~~~ class Point { num x, y; Point(this.x, this.y); Point.polar(num theta, num radius) : x = radius * cos(theta), y = radius * sin(theta); } ~~~ 以下是反面例子: ~~~ class Point { num x, y; Point(this.x, this.y); static Point polar(num theta, num radius) => Point(radius * cos(theta), radius * sin(theta)); } ~~~ ## const如果类支持它,请考虑构造函数。 如果你有一个所有字段都是final的类,并且构造函数除了初始化它们之外什么都不做,你可以创建那个构造函数const。这允许用户在需要常量的位置创建类的实例 -- 在其他更大的常量,切换案例,默认参数值等内部。 如果你没有明确地做到const,他们就无法做到。 但请注意,const构造函数是您的公共API中的承诺。如果稍后将构造函数更改为非构造函数const,则会破坏在常量表达式中调用它的用户。如果您不想承诺,请不要这样做const。实际上,const构造函数对于简单的,不可变的数据记录类很有用。