แปลง String เป็นค่า Enum ที่เทียบเท่า


103

เป็นไปได้ไหมที่ฉันจะแปลง a Stringเป็นค่าเทียบเท่าใน an Enumerationโดยใช้ Java

แน่นอนฉันสามารถทำสิ่งนี้ได้ด้วยข้อความจำนวนมากif-elseแต่ฉันต้องการหลีกเลี่ยงสิ่งนี้ถ้าเป็นไปได้

ให้เอกสารนี้:

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

ฉันไม่ได้หวังมากเกินไปว่าสิ่งนี้จะเป็นไปได้โดยปราศจาก ifs หรือคำชี้แจงกรณี

คำตอบ:


227

หวังว่าคุณจะรู้ว่าjava.util.Enumerationแตกต่างจาก Java 1.5 Enum types

คุณสามารถใช้YourEnum.valueOf("String")เพื่อรับประเภท enum ที่เทียบเท่าได้

ดังนั้นหาก enum ของคุณถูกกำหนดดังนี้:

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

คุณสามารถทำได้:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);

ใช่ขอบคุณเพิ่งเห็นdownload.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html
Ankur

18

สมมติว่าคุณใช้ Java 5 enums (ซึ่งไม่แน่ใจนักเนื่องจากคุณพูดถึงEnumerationคลาสเก่า) คุณสามารถใช้valueOfวิธีการของjava.lang.Enumคลาสย่อย:

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

8

ใช้วิธีการแบบคงที่ที่กำหนดไว้สำหรับแต่ละvalueOf(String)enum

ตัวอย่างเช่นถ้าคุณมีenum MyEnumคุณสามารถพูดMyEnum.valueOf("foo")


4

ฉันอาจออกแบบโซลูชันของตัวเองมากเกินไปโดยไม่ทราบว่าType.valueOf("enum string")มีอยู่จริง

ฉันเดาว่ามันให้การควบคุมที่ละเอียดกว่า แต่ฉันไม่แน่ใจว่ามันจำเป็นจริงๆ

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);
    }
}

ผมคิดว่าคุณกำลังแลกเปลี่ยนIllegalArgumentExceptionสำหรับRuntimeException(หรืออะไรก็ตามยกเว้นคุณต้องการที่จะโยน) ซึ่งอาจรหัสขึ้นอาจทำความสะอาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.