flutter - 在 dart 中覆盖类变量时出错
问题描述
我一直在学习飞镖,但在下面的代码中遇到了一些问题,其中我使用默认构造函数来避免在类中采用默认值作为一种做法,但编译器说必须初始化类变量,因为这些值不能可以为空。如果我的默认构造函数在初始化 main 中的类对象时分配这些值,是否真的需要分配类属性?请帮助解决这个问题。
class Person
{
String name;
int age;
Person(String st_name, int age)
{
name = st_name;
this.age = age;
}
}
void main()
{
Person obj_p1 = new Person('Ralph',25);
var obj_p2 = Person('Mark', 26);
print(obj_p1.name);
print(obj_p1.age);
print(obj_p2.name);
print(obj_p2.age);
}
解决方案
编辑
要将其与命名参数一起使用,请在构造函数中为参数添加前缀,required
如下所示:
class Person {
final String name;
final int age;
Person({required this.name, required this.age});
}
为了解决这个问题,我在你的变量前面加上late
关键字,通知编译器你稍后将初始化这个变量(也就是在构造函数中)。
class Person {
late String name;
late int age;
Person(String st_name, int age) {
name = st_name;
this.age = age;
}
}
void main() {
Person obj_p1 = new Person('Ralph', 25);
var obj_p2 = Person('Mark', 26);
print(obj_p1.name);
print(obj_p1.age);
print(obj_p2.name);
print(obj_p2.age);
}
但是,在 Dart 中,这不是为类初始化变量的推荐方法。正确的方法如下:
class Person {
final String name;
final int age;
Person(this.name, this.age);
}
上面的代码本质上是第一个块中的代码。关键字只是告诉编译器这个final
变量一旦传入构造函数就不能改变。
推荐阅读
- swift - 只有在为 *lower* 目标编译代码时才可以包含 typealias 条目吗?
- c++ - 在信号处理程序中捕获 C++ 未处理的异常并恢复应用程序
- javascript - 管理 Reactive Form 值并且该值是一个对象
- php - 使用 htaccess 映射页面
- redirect - nginx通配符重定向配置
- wpf - VirtualizingPanel 不使用 WPF XAML 进行虚拟化
- haskell - 如何避免 Haskell 中的 stackoverflow 错误
- php - WP_Query 未返回用于搜索查询的 ID
- r - R - SpatialPolygons 列表中的 SpatialPolygonsDataFrame LIST
- c# - 将项目插入循环内索引为零的可观察集合仅适用于第一次迭代