在 dart 中覆盖类变量时出错
Posted
技术标签:
【中文标题】在 dart 中覆盖类变量时出错【英文标题】:Getting error while overriding class variables in dart 【发布时间】:2021-08-17 15:37:58 【问题描述】:我一直在学习飞镖,但在下面的代码中遇到了一些问题,我使用默认构造函数来避免在类中使用默认值作为一种做法,但编译器说必须初始化类变量,因为这些值可以'不可为空。如果我的默认构造函数在初始化 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);
【问题讨论】:
【参考方案1】:编辑
要将其与命名参数一起使用,请在构造函数中为参数添加前缀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
关键字只是告诉编译器这个变量一旦传入构造函数就不能更改。
【讨论】:
我修改了您之前提到的代码,并且运行良好。但是当我将此代码与命名参数一起使用时,它再次给出一个错误,即类变量不能为空。那么这是使用命名参数的正确方法还是我犯了任何错误,因为如果我在构造函数中初始化任何值,它就可以正常工作。代码:人(this.name,this.age);给出错误******* Person(this.name="x", this.age=20);工作正常 ******* 命名参数的主对象初始化 --- var obj_p2 = Person( name : 'Mark', age: 26); 编辑了我的答案@Keshav以上是关于在 dart 中覆盖类变量时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何访问和更改在 FLUTTER/DART 的另一个类中声明的字符串变量的值