2010-05-14 36 views
7

Tôi có một Enum được xác định có chứa kiểu trả về kiểu như "Chuỗi", Float, Danh sách, Đôi, v.v.Enums, sử dụng trong trường hợp chuyển đổi

Tôi sẽ sử dụng nó trong báo cáo trường hợp chuyển. Ví dụ: enum của tôi là

public enum MethodType { 
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
} 

Trong tệp thuộc tính, tôi có cặp giá trị chính như sau. Test1 = String Test2 = Double

Trong mã của tôi, tôi nhận được giá trị cho khóa. Tôi cần phải sử dụng VALUE trong trường hợp chuyển đổi để xác định loại và dựa trên đó tôi đã thực hiện một số logic. Ví dụ: một cái gì đó như thế này

switch(MethodType.DOUBLE){ 
    case DOUBLE: 
     //Dobule logic 
} 

Ai đó có thể vui lòng giúp tôi triển khai điều này?

Trả lời

17

tôi đoán đây là những gì bạn đang tìm kiếm:

public class C_EnumTest { 
    public enum MethodType { 
     DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
    } 
    public static void main(String[] args) { 
     String value = "DOUBLE"; 
     switch(MethodType.valueOf(value)) { 
     case DOUBLE: 
      System.out.println("It's a double"); 
      break; 
     case LIST: 
      System.out.println("It's a list"); 
      break; 
     } 
    } 
} 

vì không phân biệt chữ hoa bạn có thể làm một MethodType.valueOf(value.toUpperCase()).

+0

Đây chính xác là những gì tôi đang tìm kiếm. Có thể kiểm tra ignorecase cho MethodType.valueOf không? – Apps

+0

Cảm ơn tất cả mọi người đã cung cấp Trợ giúp. – Apps

+0

Chỉ cần thêm một dòng để không phân biệt chữ hoa chữ thường. – tangens

5

Bạn đã xác định enum, nhưng bạn cần xác định biến số loại đó. Như thế này:

public enum MethodType { ... } 

public MethodType myMethod; 

switch (myMethod) 
{ 
    case MethodType.DOUBLE: 
     //... 
     break; 
    case MethodType.LIST: 
     //... 
     break; 
//... 
} 

Edit:

Trước đây, đoạn này được sử dụng var như tên biến, nhưng đó là một từ khóa dành riêng. Đã thay đổi thành myMethod.

+0

Nhưng trong trường hợp của tôi, tôi sẽ nhận được giá trị dựa trên khóa từ tệp thuộc tính. Ví dụ giá trị của tôi sẽ là "Chuỗi", tôi cần sử dụng giá trị này trong trường hợp chuyển đổi. Có cách tiếp cận thay thế nào cho điều này không. Làm ơn hãy cho tôi biết? – Apps

+0

Tôi không hoàn toàn chắc chắn rằng tôi hiểu ý của bạn là gì. Nếu bạn đang tìm kiếm nhiều cặp khóa/giá trị hơn, bạn có thể muốn sử dụng từ điển thay thế. Nếu bạn muốn xem loại giá trị là gì, ví dụ nếu var * là * là double, thì mã sẽ là 'if (var là double) {// do stuff}' – JYelton

3

Bạn không cần một công tắc nào cả (đây là trong java btw như vậy có thể không làm việc cho bạn): Rõ ràng bạn sẽ muốn thêm một số kiểm tra null, xử lý ngoại lệ tốt hơn, vv

public enum MethodType { 

     String,LONG,DOUBLE,THING; 

     static MethodType fromString(String x) throws Exception { 
      for (MethodType currentType: MethodType.values()){ 
       if (x.equals(currentType.toString())){ 
        return currentType; 
       } 
      } 
      throw new Exception("Unmatched Type"); 
     } 
    } 
+0

Và cũng có giới hạn rằng chuỗi khớp với đại diện của methodType. Nếu đó là một vấn đề, bạn có thể định nghĩa một phương thức abstractRepresentation trừu tượng và thực hiện nó cho mỗi MethodType – StevenWilkins

+1

Đây chính xác là phương thức tĩnh 'valueOf (String)' của tất cả các enums, ví dụ: 'MethodType.valueOf (" DOUBLE ") == MethodType.DOUBLE'. – ZoogieZork

+0

@ZoogieZork - Bạn nói đúng, điểm tuyệt vời, hoàn toàn trượt tâm trí của tôi. – StevenWilkins

5

Điều này có thể gần hơn với những gì bạn cần. Bạn có thể đặt thuộc tính propertyName bất cứ điều gì bạn cần trong trường hợp này:

public enum MethodType { 

    STRING("String"), 
    LONG("Long"), 
    DOUBLE("Double"), 
    THING("Thing"); 

    private String propertyName; 

    MethodType(String propName) { 
    this.propertyName = propName; 
    } 

    public String getPropertyName() { 
    return propertyName; 
    } 

    static MethodType fromPropertyName(String x) throws Exception { 
    for (MethodType currentType : MethodType.values()) { 
     if (x.equals(currentType.getPropertyName())) { 
     return currentType; 
     } 
    } 
    throw new Exception("Unmatched Type: " + x); 
    } 
} 
Các vấn đề liên quan