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.

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


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

8

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

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.