Tôi đã có đối tượng lớp cho một enum (Tôi có một Class<? extends Enum>
) và tôi cần để có được một danh sách các giá trị liệt kê đại diện bởi enum này. Chức năng tĩnh values
có những gì tôi cần, nhưng tôi không biết cách truy cập vào nó từ đối tượng lớp.Java Enums: Liệt kê các giá trị được liệt kê từ một Class <? mở rộng Enum>
Trả lời
sử dụng phản ánh là đơn giản như gọi Class#getEnumConstants():
List<Enum> enum2list(Class<? extends Enum> cls) {
return Arrays.asList(cls.getEnumConstants());
}
Nếu bạn biết tên của các giá trị mà bạn cần:
Class<? extends Enum> klass = ...
Enum<?> x = Enum.valueOf(klass, "NAME");
Nếu không, bạn có thể nhận được một mảng của họ bởi (như Tom đã đến đầu tiên):
klass.getEnumConstants();
Tôi ngạc nhiên khi thấy rằng EnumSet#allOf()
không được đề cập:
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
Tạo một bộ enum chứa tất cả các yếu tố trong các loại yếu tố quy định.
Hãy xem xét những điều sau enum
:
enum MyEnum {
TEST1, TEST2
}
Đơn giản chỉ cần gọi phương thức như thế này:
Set<MyEnum> allElementsInMyEnum = EnumSet.allOf(MyEnum.class);
Tất nhiên, điều này trả về một Set
, không phải là một List
, nhưng nó phải là đủ nhiều trường hợp sử dụng.
Hoặc, nếu bạn có một không rõ enum
:
Class<? extends Enum> enumClass = MyEnum.class;
Set<? extends Enum> allElementsInMyEnum = EnumSet.allOf(enumClass);
Ưu điểm của phương pháp này, so với Class#getEnumConstants()
, là nó được đánh máy để nó không thể vượt qua bất cứ điều gì khác hơn là một enum
với nó . Ví dụ, đoạn code dưới đây là hợp lệ và trả null
:
String.class.getEnumConstants();
Trong khi điều này sẽ không biên dịch:
EnumSet.allOf(String.class); // won't compile
- 1. Phương pháp mở rộng liệt kê
- 2. Mở rộng các kiểu liệt kê trong F #
- 3. Lấy các giá trị liệt kê từ Lớp
- 4. Chỉ định giá trị cho các loại được liệt kê
- 5. JAXB liệt kê với giá trị số
- 6. Liệt kê các phím trong từ điển?
- 7. Giá trị liệt kê Scala không được đặt hàng?
- 8. Cách truyền danh sách <? mở rộng Foo> để Liệt kê <Foo>
- 9. Vòng lặp trên các giá trị liệt kê
- 10. Java Array Liệt kê Issue
- 11. Liệt kê các giá trị đăng ký trong Go (Golang)
- 12. Liệt kê các giá trị có thể đặt trong Delphi
- 13. Tìm giá trị bất thường trong một mảng, liệt kê
- 14. Liệt kê nhóm yum
- 15. Sự khác biệt giữa liệt kê <? mở rộng ZipEntry> và Enumeration <ZipEntry>?
- 16. Scala liệt kê để int
- 17. Thừa kế liệt kê trong Java?
- 18. Hạn chế liệt kê WSDL với cặp khóa/giá trị
- 19. Cách liệt kê các phím CFProperyList/CFDictionary
- 20. XSD Định nghĩa cho liệt kê giá trị gia tăng
- 21. String để liệt kê
- 22. Liệt kê các ổ đĩa ngoài
- 23. Cách chuyển các giá trị được liệt kê sang một dịch vụ web
- 24. gdb: howto liệt kê các tệp đang mở
- 25. Chuyển đổi một liệt kê thành Iterator
- 26. Liệt kê ShortCigned được gán trong Excel
- 27. liệt kê các ổ cắm đa hướng
- 28. Liệt kê tất cả các xử lý tệp đang mở?
- 29. Cách liệt kê các tab trong vim?
- 30. Các loại được liệt kê trong SQL Server 2008?
tĩnh của nó - phản ánh. – IAdapter
'Lớp' là một đối tượng phản chiếu (nó đặt trước gói). –