2011-11-03 31 views
43

Tôi nhận được giá trị trả về ở dạng dài hoặc int từ mã Native trong Android, mà tôi muốn chuyển đổi hoặc khớp với enum, cho mục đích xử lý. Có thể không? Làm cách nào?Cách đối sánh int với enum

Trả lời

57

Nếu bạn có quyền kiểm soát đầy đủ các giá trị và sự đếm, và họ đang tuần tự, bạn có thể sử dụng enum giá trị thứ tự:

enum Heyo 
{ 
    FirstVal, SecondVal 
} 

...later 

int systemVal = [whatever]; 
Heyo enumVal = Heyo.values()[systemVal]; 

int againSystemVal = enumVal.ordinal(); 
+5

Sử dụng thứ tự để có được một "giá trị" cho một enum không được khuyến khích. Thay vào đó, hãy sử dụng trường mẫu thay thế. Xem khoản 31 trong ấn bản thứ hai của Java hiệu quả của Josh Bloch. –

50

Bạn có thể thiết lập enum của bạn để nó có dài hoặc int được tích hợp vào nó.

ví dụ: Tạo tập tin này ePasswordType.java

public enum ePasswordType { 

    TEXT(0), 
    NUMBER(1); 

    private int _value; 

    ePasswordType(int Value) { 
     this._value = Value; 
    } 

    public int getValue() { 
      return _value; 
    } 

    public static ePasswordType fromInt(int i) { 
     for (ePasswordType b : ePasswordType .values()) { 
      if (b.getValue() == i) { return b; } 
     } 
     return null; 
    } 
} 

Sau đó bạn có thể truy cập các giá trị được gán như thế này:

ePasswordType var = ePasswordType.NUMBER; 

int ValueOfEnum = var.getValue(); 

Để có được enum khi bạn chỉ biết int, sử dụng này:

ePasswordType t = ePasswordType.fromInt(0); 

Enums in java are ve ry mạnh mẽ vì mỗi giá trị có thể là lớp riêng của nó.

+3

Đây là một cách tiếp cận tốt hơn nhiều so với sử dụng thứ tự(). Để tìm hiểu lý do, hãy đọc Hiệu quả Java –

+0

@Kuffs: Có cách nào thích hợp để ** đặt ** enum bằng cách sử dụng giá trị số nguyên không? – Levit

+0

@Levit Giá trị được đặt ở thời gian thiết kế không chạy thời gian. Nếu bạn có nghĩa là lấy giá trị enum khi bạn chỉ biết int, xem câu trả lời đã chỉnh sửa của tôi. – Kuffs

Các vấn đề liên quan