2013-07-19 42 views
50

Tôi có một enum được định nghĩa như thế này và tôi muốn có thể nhận được các chuỗi cho các trạng thái riêng lẻ. Làm thế nào tôi nên viết một phương pháp như vậy?Nhận giá trị chuỗi từ enum trong Java

Tôi có thể nhận giá trị int của các trạng thái nhưng cũng muốn tùy chọn nhận các giá trị chuỗi từ ints.

public enum Status { 
    PAUSE(0), 
    START(1), 
    STOP(2); 

    private final int value; 

    private Status(int value) { 
     this.value = value 
    } 

    public int getValue() { 
     return value; 
    } 
} 
+7

Trạng thái s = Trạng thái.PAUSE; System.out.println (s.name()); –

+0

Câu trả lời này sẽ giúp bạn hiểu http://stackoverflow.com/questions/17606866/how-to-set-a-value-of-a-variable-of-an-object-in-an-arraylist/17607004#17607004 –

+0

bạn muốn nhận được PAUSE từ số nguyên 1? –

Trả lời

43

Bạn có thể sử dụng phương pháp values():

Ví dụ Status.values()[0] sẽ trở lại PAUSE trong trường hợp của bạn, nếu bạn in nó, toString() sẽ được gọi và "PAUSE" sẽ được in.

+0

Phải, chỉ cần thêm 'Status.values ​​() [0]' sẽ thuộc loại 'Trạng thái' không phải là' Chuỗi'. – harsh

+0

@harsh Tôi đã làm rõ câu trả lời của tôi, hy vọng nó được thực hiện ngay bây giờ. – Juvanis

80

nếu status là loại Status enum, status.name() sẽ cung cấp cho bạn tên định nghĩa của nó.

+5

Có phải lý do của họ không được đánh dấu là chính xác không? Có vẻ như câu trả lời tốt hơn là –

+2

@JoeMaher 'toString()' có vẻ là cách ưa thích theo tài liệu chính thức: "Hầu hết các lập trình viên nên sử dụng phương thức toString() tùy chọn này, vì phương thức toString có thể trả về nhiều người dùng hơn tên thân thiện. " (http://docs.oracle.com/javase/6/docs/api/java/lang/Enum.html#name()) – Carsten

+3

@Carsten 'status.name()' là thích hợp nếu bạn muốn sử dụng nó trong mã (cho độ chính xác và nhất quán), 'status.toString()' là thích hợp nếu bạn muốn hiển thị nó cho người dùng (để dễ đọc). – brandaemon

4

Bạn có thể thêm phương pháp này để enum Status của bạn:

public static String getStringValueFromInt(int i) { 
    for (Status status : Status.values()) { 
     if (status.getValue() == i) { 
      return status.toString(); 
     } 
    } 
    // throw an IllegalArgumentException or return null 
    throw new IllegalArgumentException("the given number doesn't match any Status."); 
} 

public static void main(String[] args) { 
    System.out.println(Status.getStringValueFromInt(1)); // OUTPUT: START 
} 
9

Sử dụng tên phương pháp mặc định() như ống bễ cho

public enum Category { 
     ONE("one"), 
     TWO ("two"), 
     THREE("three"); 

     private final String name; 

     Category(String s) { 
      name = s; 
     } 

    } 

public class Main { 
    public static void main(String[] args) throws Exception { 
     System.out.println(Category.ONE.name()); 
    } 
} 
+0

tại sao không ghi đè toString để trả về tên ?? –

+2

Trả lại những gì? ONE hoặc một, có sự khác biệt (tên enum hoặc giá trị của nó) – Mercury

0

Tôi tin rằng enum có một .name() trong API của nó, khá đơn giản để sử dụng như ví dụ này:

private int security; 
public String security(){ return Security.values()[security].name(); } 
public void setSecurity(int security){ this.security = security; } 

    private enum Security { 
      low, 
      high 
    } 

Với điều này bạn chỉ cần gọi

yourObject.security() 

và trả về cao/thấp dưới dạng Chuỗi, trong ví dụ này

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