我如何编写一种方法来轻松创建不同类型的子类

问题描述 投票:1回答:1

对于项目,我必须创建代表不同类型用户的对象。所有类型都是从超类User继承的子类。在示例中,我们有一个学生,一名老师和一名协调员。每个类对某些方法都有不同的实现。为了知道我们正在处理的用户类型,从数据库中提取了一条记录,包括一个用户角色。根据角色,将创建不同类型的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 inheritance factory
1个回答
0
投票

带有开关或地图的功能界面怎么样?

public interface UserCtor<U> {
  U create(String idUser, String username, String firstName, String lastName);
}

然后您可以执行此操作:

public void makeUserTypes() {
    UserCtor<?> ctor = null;
    switch (idRole) {
        case 0:
            ctor = Student::new;
            break;
        case 1:
            ctor = Teacher::new;
            break;
        case 2:
            ctor = Coordinator::new;
            break;
    }
    user = ctor.create();
}

或者您可以使用地图:

private static Map<Integer, UserCtor<?>> ctorMap = Map.of(
    0, Student::new,
    1, Teacher::new,
    2, Coordinator::new
);

public void makeUserTypes() {
    user = ctorMap.get(idRole).create();
}
© www.soinside.com 2019 - 2024. All rights reserved.