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 enumchính kiểu đó (nếu, chẳng hạn, enumhằng số ghi đè một phương thức từ enumkiểu). getDeclaringClass()trả về enumkiểu đã khai báo hằng số đó, đó là kiểu bạn muốn ở đây.
Enums giống như Classes ở 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);
}