2017-11-19 2 views
-1
public enum ProgramOfStudy { 
    ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI"); 

public final String shortCut; 

ProgramOfStudy(String shortCut) { 
    this.shortCut = shortCut; 
} 
public static ProgramOfStudy getByShortCut(String shortCut) { 

    for (ProgramOfStudy program : ProgramOfStudy.values()) { 
     if (ProgramOfStudy.valueOf(shortCut).equals(program)) 
      return program; 
    } 
    return null; 
} 

}Enum Werte und valueOf

Wenn die Methode getByShortCut Aufruf wie folgt aus: getByShortCut ("CS") Ich halte einen Fehler bekommen: "Keine Enum Konstante ProgramOfStudy.CS" Was mache ich hier falsch?

+1

Was Sie tun, falsch mit Ihrem Compiler denkt statt mit dem Kopf. Ändern Sie 'ProgramOfStudy.valueOf (shortCut) .equals (program)' in 'program.shortCut.equals (shortCut)'. – shmosel

+1

Wie anders ist getByShortCut von valueOf ??? –

Antwort

-2

Anstatt Schleifen und sich mit komplizierten Gleichheitsbedingungen zu verwickeln, warum nicht ein wenig Java 8 auf dieses Problem anwenden?

public enum ProgramOfStudy { 
    ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI"); 

    public final String shortCut; 

    private static final Map<String, ProgramOfStudy> shortCutMap = Collections.unmodifiableMap(new HashMap<>() { 
     { 
      Arrays.stream(ProgramOfStudy.values()).forEach(v -> put(v.shortCut, v)); 
     } 
    }); 

    ProgramOfStudy(String shortCut) { 
     this.shortCut = shortCut; 
    } 

    public static ProgramOfStudy getByShortCut(String shortCut) { 
     return shortCutMap.get(shortCut); 
    } 
} 

public static void main(String[] args) { 
    System.out.println(ProgramOfStudy.getByShortCut("CS")); 
    System.out.println(ProgramOfStudy.getByShortCut("ACS")); 
    System.out.println(ProgramOfStudy.getByShortCut("baasda")); 
    System.out.println(ProgramOfStudy.getByShortCut("BI")); 
} 

Wenn Sie den Code-Snippet ausführen, wird es gedruckt werden: statt einer Schleife mit String-Vergleichen

ComputerScience 
AutomotiveComputerScience 
null 
BusinessInformatics 

Es ist preferrable eine Karte in diesem Fall zu verwenden. In diesem Fall gibt es nur eine Schleife bei der Initialisierung und dann nie wieder. Es ist keine gute Idee, Schleifen mit Zeichenfolgenvergleichen bei jeder Abfrage der getByShortCut-Methode zu verwenden.

-1

wenn Sie eine andere Option benötigen, wo Sie ridd der Karte bekommen können dann tun

public class StackOverF { 

    public static void main(String[] args) { 
     System.out.println("Hello World1"); 
     System.out.println(ProgramOfStudy.getByShortCut("CS")); 
     System.out.println(ProgramOfStudy.getByShortCut("CSI")); 
    } 
} 

public enum ProgramOfStudy { 
    ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI"); 

    public final String shortCut; 

    ProgramOfStudy(String shortCut) { 
     this.shortCut = shortCut; 
    } 

    public static ProgramOfStudy getByShortCut(String shortCut) { 

     return Arrays.stream(ProgramOfStudy.values()) 
      .filter(v -> v.shortCut.equals(shortCut)) 
      .findFirst() 
      .orElse(null); 
    } 
}