Một gợi ý: tốt hơn sử dụng name()
để có được những tên của enum như một String
, và bất cứ khi nào bạn cần phải lấy lại gốc Enum
từ nó, sử dụng phương pháp valueOf()
- kể từ valueOf()
hy vọng tên, không thứ tự, như một tham số. Ví dụ:
enum Example {ONE, TWO};
String name = Example.ONE.name();
Example e = Example.valueOf(Example.class, name); // e has value ONE
Nếu bạn chắc chắn cần phải sử dụng thứ tự, phương pháp ordinal()
sẽ trả về một chỉ số mà bạn có thể sử dụng để lấy tương ứng Enum
từ mảng trả về bởi phương pháp values()
. Như thế này:
int ordinal = Example.ONE.ordinal();
Example e = Example.values()[ordinal]; // e has value ONE
Như đã được chỉ ra, xem xét sử dụng EnumMap
, như đã nêu trong tài liệu, nó là
Một Bản đồ chuyên ngành thực hiện để sử dụng với các phím kiểu enum. Tất cả các khóa trong bản đồ enum phải đến từ một loại enum được chỉ định, rõ ràng hoặc ngầm định, khi bản đồ được tạo ra. Các bản đồ Enum được biểu diễn nội bộ dưới dạng mảng. Biểu diễn này cực kỳ nhỏ gọn và hiệu quả.
EDIT
Nếu bạn cần phải kết hợp một mã khác nhau cho mỗi yếu tố của enum (trừ thứ tự tự động gán nó), bạn luôn có thể thêm nó như là một thuộc tính để enum, cùng với getter và setter, như thế này:
public enum Manufacturers {
Honda(10),
GM(20),
Toyota(30),
Ferrari(40);
private int code;
Manufacturers(int code) {
this.code = code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
Ví dụ:
Manufacturers m = Manufacturers.Honda;
System.out.println(m.getCode()); // prints 10
m.setCode(100);
System.out.println(m.getCode()); // prints 100
Chỉ cần lưu ý rằng bạn sẽ không thể tạo lại đối tượng Enum
từ thuộc tính code
, vì thuộc tính đó được xác định bởi lập trình viên.
Tôi dường như không thể đặt giá trị thứ tự một cách rõ ràng, tôi đã thử: GM ("5"), Toyota ("6") – Blankman
Không, bạn không thể đặt chúng - các đơn vị sẽ khớp với thứ tự mà các giá trị được khai báo bên trong enum. – ziesemer
Nếu vì lý do nào đó, bạn cần một số 'int' khác nhau liên quan đến mỗi phần tử của enum (trừ thứ tự được gán tự động), bạn luôn có thể thêm nó làm thuộc tính cho enum, cùng với getters –