繁体   English   中英

为JAVA中的列表定义此枚举的构造函数?

[英]Define constructor for this enum for the list in JAVA?

public enum Role{ 
    ADMIN("SMITH","KEVIN"),
    STUDENT("JACK", "JILL", "MARRY", "MALA"),
    GURDIAN("BOB");
}

如何在JAVA中为此枚举定义构造函数?

我可以按以下方式发起吗?

Role(List<String> userlist){}

我能想到的最合适的构造函数是String varargs,如下所示:

Role(String... names) {
    // TODO
}

采用List<String>构造函数将不匹配签名,也不会自行编译。

但是,您始终可以重载构造函数。

您绝对可以使用varargs样式构造函数

private final List<String> values;
Role(String... values) {
  this.values = Arrays.asList(values);
} 

public List<String> getValues() {
    return values;
}

然后,当您需要基于提供的名称的特定角色时,请查找为

public static Role find(String name) {
for (Role role: Role.values()) {
    if (rol.getValues().contains(name)) {
        return rol;
    }
}
return null;

}

public enum Role{ 
    ADMIN("SMITH","KEVIN"),
    STUDENT("JACK", "JILL", "MARRY", "MALA"),
    GURDIAN("BOB");

    private String[] values;

    Role(String ... values) {
         this.values = values;
    }
}

您可以在构造函数中使用use变量参数varargs,例如:

public enum Role {

    ADMIN("SMITH","KEVIN"),
    STUDENT("JACK", "JILL", "MARRY", "MALA"),
    GURDIAN("BOB");

    private Role(String...name) {
        this.values = name;
    }
}

有声明(在枚举中),在字段中存储和用法。

由于这些是枚举类中定义的单例,因此声明的形式仅在优雅方面很重要。

public enum Role{ 
    ADMIN(user("SMITH", "KEVIN")),
    STUDENT(user("JACK", "JILL"), user("MARRY", "MALA")),
    GURDIAN(user("BOB"));

    // Local factory methods
    // User or Principal
    private User user(String firstname, String surname) { ... }
    private User user(String firstname) { ---}

    private final Set<User> users;

    Role(User... users) {
        if (users.length == 1) { ...
        }
        this.users = new HashSet<>();
        Collections.addAll(users);
    }

    public boolean ...(...) {
        ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM