我有两个班级:Person
和Student
。 Student
扩展了Person
。当Person
注册为Student
时,将归属Student
的新属性。我想将人的所有属性传递给学生。为此,我创建了一个自定义构造函数:Student.fromPerson(Person person)
但是,类Person具有很多专有性,当开发人员向Person添加专有性时,他们还必须在Student中更新此构造函数。有没有一种方法可以自动将人的属性归于其超类,因为它是同一类型而无需编写:: super(fname: person.fname, lname: person.lname);
并列出所有属性?
class Person {
String fname;
String lname;
Person({this.fname, this.lname});
}
class Student extends Person {
String major;
String year;
Student({this.major, this.year, String fname, String lname})
: super(fname: fname, lname: lname);
Student.fromPerson(Person person, {this.major, this.year})
: super(fname: person.fname, lname: person.lname); // <- is there a better way
}
void main() {
Person person = Person(fname: "Lina", lname: "Dosse");
Student student = Student.fromPerson(person, major: 'CS', year: '2015');
}
答案 0 :(得分:0)
没有任何一种方法可以在任何地方使用。在VM上,您可以使用dart:mirrors
来反映Person
的字段,但这在Web上或颤动中均不起作用。您还可以使用codegen生成可复制到字段中的样板代码,但是我不知道任何现有的构建器都可以执行此操作,因此您需要自己实现它。 (如果您想尝试此路线,请参见https://github.com/dart-lang/build/tree/master/docs。
更好的方法可能是更改模型。可以不用Student
is 是Person
来建模,而可以尝试Student
has 是Person
。>
class Student {
Person person;
String major;
String year;
Student({this.person, this.major, this.year});
}