2017-11-19 7 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; 
} 

}列挙値とのvalueOf

このような方法のgetByShortCutを呼び出す:getByShortCut(「CS」)私はエラーを取得しておく:「いいえ列挙型定数ProgramOfStudy.CSは、」私はここで間違って何をしているんですか?

+1

を行うには、あなたのコンパイラではなく、自分の頭で考えています。 'ProgramOfStudy.valueOf(shortCut).equals(program)'を 'program.shortCut.equals(shortCut)'に変更してください。 – shmosel

+1

valueOfからのgetByShortCutの違いは? –

答えて

-2

複雑な等価条件でループして絡みつくのではなく、この問題に少しJava 8を適用してみましょう。あなたはこのコードのスニペットを実行する場合

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")); 
} 

、それが印刷されます:

ComputerScience 
AutomotiveComputerScience 
null 
BusinessInformatics 

代わりに文字列比較とループのこのような場合にはマップを使用することpreferrableです。この場合は初期化時にループが1つしかなく、その後はまったく繰り返されません。 getByShortCutメソッドのすべてのクエリで文字列比較のループを持つことはお勧めできません。

-1

あなたがマップのriddを得ることができます別のオプションを必要とするならば、あなたは間違って何をやっている

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); 
    } 
} 
関連する問題