Ubah String menjadi nilai Enum yang setara

100

Apakah mungkin bagi saya untuk mengonversi menjadi Stringnilai yang setara di Enumeration, menggunakan Java.

Saya tentu saja dapat melakukan ini dengan if-elsepernyataan besar , tetapi saya ingin menghindari ini jika memungkinkan.

Diberikan dokumentasi ini:

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

Saya tidak terlalu berharap bahwa ini mungkin terjadi tanpa jika atau pernyataan kasus.

Ankur
sumber

Jawaban:

221

Harap Anda sadari, java.util.EnumerationJava 1.5 berbeda dengan tipe Enum .

Anda cukup menggunakan YourEnum.valueOf("String")untuk mendapatkan jenis enum yang setara.

Jadi, jika enum Anda didefinisikan sebagai:

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

Anda bisa melakukan ini:

String day = "SUNDAY";

Day dayEnum = Day.valueOf(day);
adarshr
sumber
ya terima kasih baru saja melihat unduhan
ini.oracle.com/javase/1,5.0/docs/api/java/lang/Enum.html
18

Dengan asumsi Anda menggunakan enum Java 5 (yang tidak begitu pasti karena Anda menyebutkan Enumerationkelas lama ), Anda dapat menggunakan valueOfmetode java.lang.Enumsubclass:

MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
Xion
sumber
8

Gunakan metode statis yang valueOf(String)ditentukan untuk masing-masing enum.

Misalnya jika sudah enum MyEnumbisa Anda katakanMyEnum.valueOf("foo")

AlexR
sumber
4

Saya mungkin terlalu banyak merekayasa solusi saya sendiri tanpa menyadari bahwa itu Type.valueOf("enum string")benar - benar ada.

Saya kira ini memberikan kontrol yang lebih terperinci tetapi saya tidak yakin itu benar-benar perlu.

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

Saya kira Anda bertukar IllegalArgumentExceptionuntuk RuntimeException(atau pengecualian apa pun yang Anda ingin membuang) yang bisa berpotensi bersih kode up.

anon58192932
sumber