Trước tiên, bạn nên tự hỏi mình câu hỏi sau: Bạn có thực sự cần một int?
Mục đích của enums là có một tập hợp các mục (hằng số), có ý nghĩa trong mã mà không cần dựa vào giá trị bên ngoài (như int). Enums trong Java có thể được sử dụng như một đối số trên các trạng thái switch và chúng có thể được so sánh một cách an toàn bằng cách sử dụng toán tử bình đẳng "==" (trong số những người khác).
Đề xuất 1 (không cần số nguyên):
Thường thì không cần số nguyên đằng sau nó, sau đó chỉ cần sử dụng điều này:
private enum DownloadType{
AUDIO, VIDEO, AUDIO_AND_VIDEO
}
Sử dụng:
DownloadType downloadType = MyObj.getDownloadType();
if (downloadType == DownloadType.AUDIO) {
}
switch (downloadType) {
case AUDIO:
break;
case VIDEO:
break;
case AUDIO_AND_VIDEO:
break;
}
Đề xuất 2 (int cần thiết):
Tuy nhiên, đôi khi có thể hữu ích khi chuyển đổi một enum thành một int (ví dụ: nếu một API bên ngoài mong đợi các giá trị int). Trong trường hợp này, tôi khuyên bạn nên đánh dấu các phương thức là phương thức chuyển đổi bằng cách sử dụng toXxx()
Kiểu. Để ghi đè in toString()
.
private enum DownloadType {
AUDIO(2), VIDEO(5), AUDIO_AND_VIDEO(11);
private final int code;
private DownloadType(int code) {
this.code = code;
}
public int toInt() {
return code;
}
public String toString() {
return String.valueOf(code);
}
}
System.out.println(DownloadType.AUDIO.toInt());
System.out.println(DownloadType.AUDIO);
System.out.println(DownloadType.AUDIO.ordinal());
System.out.println(DownloadType.AUDIO.name());
System.out.println(DownloadType.VIDEO.toInt());
System.out.println(DownloadType.VIDEO.ordinal());
System.out.println(DownloadType.AUDIO_AND_VIDEO.toInt());
Tóm lược
- Không sử dụng Integer cùng với enum nếu bạn không cần thiết.
- Đừng dựa vào việc sử dụng
ordinal()
để lấy một số nguyên của một enum, vì giá trị này có thể thay đổi, nếu bạn thay đổi thứ tự (ví dụ bằng cách chèn một giá trị). Nếu bạn đang cân nhắc sử dụng ordinal()
, có thể tốt hơn là sử dụng đề xuất 1.
- Thông thường, không sử dụng hằng số int thay vì enum (như trong câu trả lời được chấp nhận), vì bạn sẽ mất an toàn kiểu.