Câu trả lời:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
trên một enum
đối tượng có thể trả về một kiểu con của enum
chính kiểu đó (nếu, chẳng hạn, enum
hằng số ghi đè một phương thức từ enum
kiểu). getDeclaringClass()
trả về enum
kiểu đã khai báo hằng số đó, đó là kiểu bạn muốn ở đây.
Enum
s giống như Class
es ở chỗ chúng được đánh máy. Mã hiện tại của bạn chỉ kiểm tra xem nó có phải là Enum hay không mà không chỉ định loại Enum mà nó là một phần.
Bởi vì bạn chưa chỉ định loại enum, bạn sẽ phải sử dụng sự phản chiếu để tìm ra danh sách các giá trị enum là gì.
Bạn có thể làm như vậy:
enumValue.getDeclaringClass().getEnumConstants()
Điều này sẽ trả về một mảng các đối tượng Enum, với mỗi đối tượng là một trong các tùy chọn có sẵn.
phương thức giá trị của enum
Phương thức enum.values () trả về tất cả các trường hợp enum.
public class EnumTest {
private enum Currency {
PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
private String value;
private Currency(String brand) {
this.value = brand;
}
@Override
public String toString() {
return value;
}
}
public static void main(String args[]) {
Currency[] currencies = Currency.values();
// enum name using name method
// enum to String using toString() method
for (Currency currency : currencies) {
System.out.printf("[ Currency : %s,
Value : %s ]%n",currency.name(),currency);
}
}
}
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
Ở đây, Vai trò là một enum chứa các giá trị sau [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
Người ta cũng có thể sử dụng java.util.EnumSet như thế này
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}