我正在创建一个类,如下所示:
class Movie {
final String title, posterPath, overview;
Movie(this.title, this.posterPath, this.overview);
Movie.fromJson(Map json) {
title = json["title"];
posterPath = json["poster_path"];
overview = json['overview';
}
}
我收到一条警告,说“必须初始化最终变量’overview’,’posterPath’和‘1’。每个变量周围也有警告说’title’不能用作设置器,因为它是最终的。
当我使用这种语法编写构造函数时,警告消失了:
Movie.fromJson(Map json)
: title = json["title"],
posterPath = json["poster_path"],
overview = json['overview'];
这到底是怎么回事?
在任何人获得对新对象的引用之前,必须完全初始化Dart对象。由于构造函数的主体可以访问this
,因此需要 在 进入构造函数的主体 之前
初始化该对象。
为此,生成的Dart构造函数具有一个初始化程序列表,看起来类似于C ++,您可以在其中初始化字段(包括final字段),但是您尚不能访问对象本身。语法:
Movie.fromJson(Map json)
: title = json["title"],
posterPath = json["poster_path"],
overview = json['overview'];
使用了初始化列表(分配后的列表:
)来初始化最后的实例变量title
,posterPath
和overview
。
第一个构造函数使用“初始化形式” this.title
将参数直接放入字段中。
构造函数
Movie(this.title, this.posterPath, this.overview);
实际上是以下方面的简写:
Movie(String title, String posterPath, String overview)
: this.title = title, this.posterPath = posterPath, this.overview = overview;
您的构造函数可以将所有这些与主体结合起来:
Movie(this.title, this.posterPath, String overview)
: this.overview = overview ?? "Default Overview!" {
if (title == null) throw ArgumentError.notNull("title");
}
(const构造函数不能具有主体,但可以具有对允许的表达式有一些限制的初始化列表,以确保可以在编译时对其进行求值)。
问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有
本文向大家介绍dart 构造函数,包括了dart 构造函数的使用技巧和注意事项,需要的朋友参考一下 示例 类的构造函数必须与其类具有相同的名称。 让我们为Person类创建一个构造函数: 与下面的方法相比,上面的示例是一种定义构造函数的更简单,更好的方法: 现在,您可以创建一个Person实例,如下所示:
问题内容: 我一直在做大学项目的作业。有一次,当您实际上可以使用构造函数方法来实现相同的结果时,我对于getter和setter的实际使用感到困惑。我已经搜索并找到许多答案,但没有令人满意的解释。我有如下laptop.java 和laoptopRecords.java调用构造函数为 在这里,我没有使用getter和setter方法,并且为每个便携式计算机对象都获得了理想的结果。 如果我以如下方式在
我在react native中开发了几个类,出现了以下问题: 酒吧类:
问题内容: 在同一个开发人员将RegExp字面量更改为构造函数调用后,我们最近遇到了一个错误,我想知道为什么根本没有区别。确切的代码是 与原始的 例如,当为时,第一个(越野车)呼叫返回,而第二个(返回) 不用说,我撤消了更改,但是我想知道为什么首先会有如此不同。 问题答案: 有两个问题: 的是 不 表达的一部分。它们是 分隔符 ,标记了正则表达式文字。如果使用则必须将其删除,否则它们在字面上会匹配
问题内容: 在Java中: 这将输出 但是,在C ++中,结果是不同的: (有关C ++代码,请参见http://www.parashift.com/c++-faq-lite/calling-virtuals-from- ctors.html ) 是什么导致Java和C ++之间的这种差异?是vtable初始化的时间吗? 编辑: 我确实了解Java和C ++机制。我想知道的是此设计决策背后的见解。
实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?
本文向大家介绍C ++中的复制构造函数和赋值运算符之间的区别,包括了C ++中的复制构造函数和赋值运算符之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解C ++中的复制构造函数和赋值运算符之间的区别。 复制构造函数 它是一个重载的构造函数。 它将使用已经存在的对象数据/值初始化新对象。 在一些现有对象的帮助下创建新对象时使用它。 这两个对象将存储在单独的存储位置中。 如果在