2012-02-28 36 views
5

Cách tốt nhất để gửi giá trị enum qua ổ cắm là gì? Có cách nào để chuyển đổi một giá trị enum thành int và ngược lại không? Giống như:Java ~ Gửi enum qua kết nối ổ cắm

Enum values { 
    value1, 
    value2 
} 

int value = (int)value1; 
And... 
values value2 = (value) value; 

Sẽ rất thú vị khi gửi email này qua internet! Cảm ơn tất cả!

Bas

+0

Bản sao của http://stackoverflow.com/questions/1681976/enum-with-int-value-in-java –

+0

Không, tôi không muốn để thêm các thuộc tính vào các giá trị, tôi chỉ muốn gửi một giá trị Enum mà là smame trên máy chủ và máy khách thông qua các socket. cảm ơn cho bình luận của bạn;) – Basaa

+0

Hãy thử [this] (http://mindprod.com/jgloss/enum.html#ORDINAL). –

Trả lời

6

Hoặc marshall để int:

int ordinal = values.value1.ordinal() 

//unmarshalling 
values.values[ordinal]; 

hoặc String:

String name = values.value1.name(); 

//unmarshalling 
values.valueOf(name); 

Cựu tiết kiệm một số không gian (32-bit như trái ngược với chuỗi khác nhau có độ dài) nhưng khó duy trì hơn, ví dụ sắp xếp lại enum giá trị sẽ phá vỡ ordinal() khả năng tương thích ngược. Mặt khác, ordinal() cho phép bạn đổi tên enum giá trị ...

+0

Điều đó (Và Banthars andswer) làm việc tốt. Trả lời câu hỏi: Hàm Java là gì để có được kết quả tương tự như C#: this.cmd = (Command) BitConverter.ToInt32 (dữ liệu, 0); – Basaa

+0

@Basaa: về mặt kỹ thuật đây phải là câu hỏi thứ hai (có nhiều khả năng bạn sẽ nhận được câu trả lời), nhưng hãy xem xét điều này: stackoverflow.com/questions/1026761 –

+0

Tôi sẽ sử dụng tên nếu bạn có thể. ví dụ. với 'dataOutput.writeUTF (value.name())' và 'Enum e = Values.forName (dataInput.readUTF())' vì nó cũng dễ đọc hơn. –

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