Enum-Abfrage verallgemeinern



  • Hallo zusammen,

    ich habe ein enum, das die folgende Form hat:

    public enum Foo {
    	Var('X'), Var2('O'), Var3('|'), Var4('E'), Var5('G'), Var6('S');
    	private char value;
    
    	private Foo(char c) {
    		value = c;
    	}
    
    	public char getValue() {
    		return value;
    	}
    
    }
    

    Später habe ich ein 2D-Array, das ausschließlich aus den obigen Chars (also X, O, |, E, G, S) besteht. Ich möchte nun in ein Foo[][] die entsprechenden Var Namen übertragen. Bis jetzt sieht das so aus:

    for(String cr : str) {
      tmp = str.toCharArray();
      for(int i = 0; i < tmp.length; i++) {
    	char currChar = tmp[i];
    	if(currChar == Foo.Var.getValue()) {
    		newPart = Foo.Var;
    	}
    	else if(currChar == Foo.Var2.getValue()){
    	        newPart = Foo.Var2;
    	}
            //...
    

    Ich frage also einfach ganz primitiv ab. Das gefällt mir aber nicht, da es sein kann, dass ich das obige Enum erweiter. Dann müsste ich jetzt auch ein weiteres "else if" hinzufügen. Kein schöner Stil. Hat jemand eine Idee, wie ich das verallgemeinern kann?

    Vielen Dank
    LG, freakC++



  • public enum Foo {
        private static final Map<Character, Foo> byValueMap = new HashMap<Character,Foo>();
        static {
            for (Foo value : values()) {
                byValueMap.put(value.getValue(), value);
            }
        }
    
        public static Foo findByValue(char c) {
            return byValueMap.get(c);
        }
    }
    


  • Super, genau das habe ich gesucht.

    LG, freakC++


Anmelden zum Antworten