Chuyển đổi chuỗi thành giá trị Enum tương đương


99

Tôi có thể chuyển đổi a Stringthành một giá trị tương đương Enumerationbằng Java không.

Tất nhiên tôi có thể làm điều này với một if-elsetuyên bố lớn , nhưng tôi muốn tránh điều này nếu có thể.

Cung cấp tài liệu này:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

Tôi không quá hy vọng rằng điều này có thể thực hiện được nếu không có ifs hoặc tuyên bố trường hợp.

Câu trả lời:


220

Hy vọng bạn nhận ra, java.util.Enumerationkhác với các loại Java 1.5 Enum .

Bạn chỉ cần sử dụng YourEnum.valueOf("String")để lấy kiểu enum tương đương.

Vì vậy, nếu enum của bạn được định nghĩa như vậy:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY
}

Bạn có thể làm điều này:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);


18

Giả sử bạn sử dụng Java 5 enums (không chắc chắn lắm vì bạn đề cập đến Enumerationlớp cũ ), bạn có thể sử dụng valueOfphương thức của java.lang.Enumlớp con:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");

8

Sử dụng phương thức tĩnh valueOf(String)được xác định cho mỗi enum.

Ví dụ, nếu bạn có enum MyEnumbạn có thể nóiMyEnum.valueOf("foo")


4

Tôi có thể đã thiết kế quá mức giải pháp của riêng mình mà không nhận ra rằng nó Type.valueOf("enum string")thực sự tồn tại.

Tôi đoán nó cho phép kiểm soát chi tiết hơn nhưng tôi không chắc nó thực sự cần thiết.

public enum Type {
    DEBIT,
    CREDIT;

    public static Map<String, Type> typeMapping = Maps.newHashMap();
    static {
        typeMapping.put(DEBIT.name(), DEBIT);
        typeMapping.put(CREDIT.name(), CREDIT);
    }

    public static Type getType(String typeName) {
        if (typeMapping.get(typeName) == null) {
            throw new RuntimeException(String.format("There is no Type mapping with name (%s)"));
        }
        return typeMapping.get(typeName);
    }
}

Tôi đoán bạn đang đổi IllegalArgumentExceptionlấy RuntimeException(hoặc bất kỳ ngoại lệ nào mà bạn muốn ném) thứ có khả năng làm sạch mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.