Frage zu Enumerations

mrbela

Bekanntes Mitglied
Hey Leute!

Ich habe eine Enumeration, die den Sinn hat zwischen einer ID, die ich in Config-Files nutze und einer String-Repräsentation, die im Programm selbst verwendet wird zu mappen.

Der Code sieht bisher so aus:

Java:
public enum TestEnum {

	ID_INSTRUMENT("Instrument"), ID_TEST("Test");
	private String representation;

	private TestEnum(String representation) {

		this.representation = representation;
	}

	@Override
	public String toString() {
		return representation;
	}
}

Klappt soweit auch!

ich lese aus dem Config-File ein "ID_Instrument" als String ein und sage dem Programm, dass er als Repräsentation "Instrument" benutzen soll..

Nun jetzt aber andersrum. Komme ich (ohne das per if-Abfragen zu lösen) à la

Java:
if (string.equals(TestEnum.ID_Instrument.toString)) {
   return TestEnum.ID_Instrument.name()
}

von "Instrument" zu "ID_INSTRUMENT"??

Danke für Eure Hilfe!!
 
Zuletzt bearbeitet:
Du kannst eine statische Map in dein Enum packen

Java:
private static final Map<String, TestEnum> map = new HashMap<String, TestEnum>();

static {
    // Map befüllen..
}

public static TestEnum get(String key) {
    return map.get(key);
}

Anschließend bekommst du dann per
Java:
TestEnum.get("Instrument");
den passenden Enum-Wert zurück.
 
Zuletzt bearbeitet:
Eine andere Möglichkeit ist es über alle Enumerationen zu iterieren und das enum mit dem passenden value zurückgeben.

Java:
public class EnumTest {
  public static void main(String[] args) {
    String test = "ID_INSTRUMENT";
    String test1 = "Instrument";
    TestEnum te = TestEnum.valueOf(test);
    TestEnum te2 = TestEnum.getByString(test1);
    System.out.println(te);
    System.out.println(te2);
  }
  
  public enum TestEnum {
    
    ID_INSTRUMENT("Instrument"), ID_TEST("Test");
    private String representation;
    
    private TestEnum(String representation) {
      
      this.representation = representation;
    }
    
    @Override
    public String toString() {
      return representation;
    }
    
    public static TestEnum getByString(String str) {
      for (TestEnum te : values()) {
        if (te.representation.equals(str)) {
          return te;
        }
      }
      throw new IllegalArgumentException("No enum constant " + str);
    }
  }
}
 

Neue Themen


Zurück
Oben