簡體   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