У меня есть следующий enum, созданный в groovy:
enum Status {
FAILED(0, "Failed"),
SUCCESSFUL(1, "Successful")
private final int key
private final String val
public Status(int key, String val) {
this.val = val
this.key = key
}
String toString() { return val }
}
Я хотел бы написать функцию для поиска записей моего класса enum, который возвращает true для Status.contains("Failed")
. Можно ли сделать это?
В Groovy вы можете сделать:
enum Status {
FAILED(0, 'Failed'),
SUCCESSFUL(1, 'Successful')
private final int key
private final String val
public Status(int key, String val) {
this.val = val
this.key = key
}
String toString() { val }
static boolean containsVal(String val) {
Status.values()*.val.contains val
}
}
assert Status.containsVal('Failed')
Вы можете сами писать необходимые методы
Вот пример в java:
enum Status {
FAILED(0, "Failed"),
SUCCESSFUL(1, "Successful");
private final int key;
private final String val;
Status(int key, String val) {
this.val = val;
this.key = key;
}
public static Status containsName(String name) {
for (Status status : Status.values()) {
if (status.name().equalsIgnoreCase(name)) {
return status;
}
}
return null;
}
public static Status containsVal(String val) {
for (Status status : Status.values()) {
if (status.val.equalsIgnoreCase(val)) {
return status;
}
}
return null;
}
public String toString() { return val; }
}
Метод containsName
возвращает экземпляр Status, если его имя равно аргументу. Метод containsValue
возвращает экземпляр Status, если его значение равно аргументу.
Status failed = Status.containsName("FAILED");
Status successful = Status.containsVal("Successful");