2010-12-15 13 views
2

Ich lese Konfiguration aus einer XML-Datei. Ich habe eine Eigenschaft namens linkType in meiner Konfiguration. Ich habe äquivalente enum-Klasse in meinem Projekt, die zwei Arten von Link deklariert.Wie setze ich Enum von der Konfiguration

Wie kann ich Enum-Typ von String festlegen? Wenn ich EMPTY von der Konfiguration lese und wenn ich linkType.EMPTY enum deklariert habe, wie werde ich dies auf LEER setzen?

Da weiter in meinem Code habe ich eine switch-Anweisung auf dieser Enum aber ich kann es nicht von der Konfiguration

Antwort

3

gesetzt Klingt wie Sie für Enum.valueOf suchen.

(Sorry über den ungenauen Link, kann nicht den Raum in der URL zu arbeiten.)

2

Alle Aufzählungen haben eine statische Methode valueOf (String), die eine Instanz der Enumeration zurück, wenn die Zeichenfolge eines Spiel Mitglied der Enum.

0

Wenn Sie XML für die Konfiguration verwenden, können Sie InPUT verwenden.

<SParam id="linkType"> 
    <SChoice id="EMPTY"/> 
    <SChoice id="NON_EMPTY"/> 
    ... 
</SParam> 

In einem Code Erfassungsdeskriptor Sie entscheiden, wie Sie dies Ihren Code abbildet: Sie würden die gültigen Werte in einem Entwurfsraum Descriptor definieren

<Mapping id="linkType" type="my.package.linkType"/> 
<Mapping id="linkType.EMPTY" type="EMPTY"/> 
<Mapping id="linkType.NON_EMPTY" type="NON_EMPTY"/> 
... 

schließlich in Ihrer Konfiguration (sagen wir, „config .xml "), schreiben Sie:

<SValue id="linkType" value="EMPTY"/> 

InPUT kümmert sich um die Behandlung Enum. Aus Ihrem Code rufen Sie an:

Design input = new Design("config.xml"); 
LinkType lt = input.getValue("linkType"); 

Für einen einzigen Parameter würden Sie wahrscheinlich nicht die Mühe machen. Wenn Sie jedoch viele Eigenschaften haben und sicherstellen möchten, dass nur bestimmte Werte verwendet werden können, ist InPUT möglicherweise eine Option.

Eine Randnotiz: Gemäß der Konvention sollte enum "linkType" "LinkType" heißen.

+1

Dies sieht ein bisschen Schwergewicht für was benötigt wird. Es scheint einfacher zu sein, einfach die Anweisung 'switch' zu verwenden und die' enum'-Werte dort aufzulisten. – Will

+0

Unter der Annahme einer einzelnen Enum-Eigenschaft gilt dies, wie bereits in meiner Antwort erwähnt. Die vorgestellte Lösung skaliert jedoch besser in der Menge parametrischer Entscheidungen und ihrer Komplexität und ist außerdem an Codeänderungen angepasst. Aus dem Kontext ist nicht ersichtlich, wie viel mehr Konfiguration das Szenario erfordert. –

Verwandte Themen