如何解决如何使用空安全和实例化更新 Dart 的工厂构造函数?
我一直在用一些过时的书来学习 Dart。可以理解的是,我遇到了一个我无法解决的问题。我正在阅读的书是 Alessandro Biessek (2019) 在工厂构造函数部分下的“初学者的颤振”。以下代码来自本书(第 48-49 页):
class Student extends Person {
Student(firstName,lastName) : super (firstName,lastName);
}
class Employee extends Person {
Employee(firstName,lastName);
}
class Person {
String firstName;
String lastName;
Person([this.firstName,this.lastName]);
factory Person.fromType([PersonType type]){
switch(type){
case PersonType.employee:
return Employee();
case PersonType.student:
return Student();
}
return Person();
}
String getfullName() => '$firstName $lastName';
}
enum PersonType { student,employee}
我的问题:
我尝试过的: 1a) 我试图设置参数 firstName 和 lastName = ''。 1b) 我还尝试从构造函数和工厂构造函数中删除 []。 2)我不明白如何实例化一个工厂人。但是,我尝试了以下方法来实例化它:
void main() {
Person.fromType(PersonType.employee)
..firstName = 'Clark'
..lastName = 'Kent';
}
在 DartPad 中没有成功。
任何帮助将不胜感激。
解决方法
由于您的类属性可以是null,因此您需要添加?。
您代码中的另一个问题是 Student 和 Employee 有一个带有两个参数的构造函数,但在您的 factory Person.fromType
中,您不带任何参数调用它。
class Person {
String? firstName;
String? lastName;
Person([this.firstName,this.lastName]);
factory Person.fromType(Person person,[PersonType? type]){
switch(type){
case PersonType.employee:
return Employee(person.firstName,person.lastName);
case PersonType.student:
return Student(person.firstName,person.lastName);
default:
return person;
}
}
String getfullName() => '$firstName $lastName';
}
final Person person = Person('FirstName','LastName');
final Student student = Person.fromType(Person('WithoutLastName'),PersonType.student) as Student;
final Employee employee = Person.fromType(person,PersonType.employee) as Employee;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。