【发布时间】:2020-06-14 20:46:27
【问题描述】:
对于一个项目,我必须创建代表不同类型用户的对象。所有类型都是继承自超类 User 的子类。在示例中,我们有一个学生、教师和一个协调员。每个类都有某些方法的不同实现。 要知道我们正在处理什么样的用户,需要从数据库中提取一条记录,包括用户角色。根据角色,创建不同类型的用户子类。 目前我正在使用如下所示的 switch 语句。但是,由于它们都有相同的构造函数,这会导致代码非常重复。怎样才能更优雅/更有效地做到这一点?
public void makeUserTypes() {
switch (idRole) {
case 0:
user = new Student(idUser, username, firstName, lastName);
break;
case 1:
user = new Teacher(idUser, username, firstName, lastName);
break;
case 2:
user = new Coordinator(idUser, username, firstName, lastName);
break;
}
}
【问题讨论】:
-
为什么不尝试使用角色类型的枚举,然后简单地使用带有称为角色的额外字段的用户类型?假设这些只是数据类。然后,当您需要执行一些逻辑时,您可以切换角色。
-
每种类型都有自己的特定方法实现
-
另一种方法是使用反射,您从数据库中获得的角色可以映射到类型名称中,然后您只需实例化该类型。
-
反射听起来很有趣,我对编程和java比较陌生。那将是使用 Class.forName() ?
-
不仅如此,您还需要将参数传递给构造函数。试试看this。
标签: java inheritance factory