Est-il possible pour moi de convertir un String
en une valeur équivalente dans un Enumeration
, en utilisant Java.
Je peux bien sûr faire cela avec un grand if-else
_ déclaration, mais je voudrais éviter cela si possible.
Compte tenu de cette documentation:
http://download.Oracle.com/javase/1.4.2/docs/api/Java/util/Enumeration.html
Je ne suis pas trop optimiste que cela soit possible sans ifs ou une déclaration de cas.
J'espère que vous réalisez que Java.util.Enumeration
Est différent des types Java 1.5 Enum .
Vous pouvez simplement utiliser YourEnum.valueOf("String")
pour obtenir le type enum équivalent.
Donc si votre enum est défini comme suit:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
Vous pourriez faire ceci:
String day = "SUNDAY";
Day dayEnum = Day.valueOf(day);
En supposant que vous utilisiez Java 5 énumérations (ce qui n’est pas si certain puisque vous mentionnez old Enumeration
class)), vous pouvez utiliser la méthode valueOf
de Java.lang.Enum
sous-classe:
MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
Utilisez la méthode statique valueOf(String)
définie pour chaque enum
.
Par exemple, si vous avez enum MyEnum
, Vous pouvez dire MyEnum.valueOf("foo")
J'aurais peut-être trop conçu ma propre solution sans réaliser que Type.valueOf("enum string")
existait réellement.
Je suppose que cela donne un contrôle plus granulaire mais je ne suis pas sûr que ce soit vraiment nécessaire.
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);
}
}
Je suppose que vous échangez IllegalArgumentException
contre RuntimeException
(ou toute exception que vous souhaitez lancer) qui pourrait potentiellement nettoyer le code.