2014-02-21 59 views
0

我的教授希望我們創建一個名爲MedicalSpecialty的枚舉,其中GENERAL_MEDICINE,PEDIATRICS和ONCOLOGY是枚舉成員(迄今爲止很好)。返回與字符串參數同名的枚舉是什麼意思?

然後,他要我們定義MedicalSpecialty枚舉「需要一個String參數,並使用相同的名稱返回MedicalSpecialty作爲字符串參數」

我不知道他的意思,裏面一個叫getFromString方法,但隨後他說:

「提示:使用toString()方法從MedicalSpecialty枚舉來執行你的支票」

我不是尋找一個解決方案,而是他被要求作出解釋,如果有人理解。 getFromString方法意味着像「general_medicine」這樣的字符串,然後輸出「GENERAL_MEDICINE」作爲類型MedicalSpecialty?這似乎沒用,可能是錯的...

任何幫助,將不勝感激!

+0

您希望'MedicalSpecialty.getFromString(「GENERAL_MEDICINE」)'返回什麼? –

+0

基本上,他們要求你做的是寫一個查找方法,該方法需要一個代表有效枚舉名稱之一的「String」值並返回該枚舉值的一個實例。就個人而言,'valueOf'會比'toString'更好,但是這就是我... – MadProgrammer

+0

新compsci有stackoverflow來幫助他們是不公平的。只是。不。公平。 –

回答

4

你有正確的想法。想想這樣:

假設你正在設計一個系統,它可以與遍佈全球的功能組件一起工作,並使用互聯網在它們之間進行通信。在歐洲的一個組成部分,想要請求從美國組件轉移一位新的腫瘤醫生。它不能通過電線發送MedicalSpeciality枚舉,所以它會發送一個字符串,例如。 「腫瘤」。現在,在您的美國組件的代碼中,您希望將該文本翻譯成您的美國組件系統能夠理解的內容:枚舉。

您需要編寫一個方法,它接收通過線路發送的輸入字符串並返回相應的Enum值。

+0

完美地解釋它!非常感謝你。 「我爲什麼要求我們這樣做呢?」我真的很掙扎。非常感激! – Jona

+0

+1尼斯的神學和解釋 – MadProgrammer

+0

@Jona「他爲什麼要我們這樣做」在Java枚舉是一個更好的方式來表示一個有限的常量集。在你的例子中,設計決定是創建一個用於表示特色的有限常量集合,然後將專業的字符串表示映射到枚舉 –

0

他的意思是你的功能有效的輸入將是以下幾點:

「GENERAL_MEDICINE」,「中華兒科雜誌」,「腫瘤學雜誌」

你的任務是String類型轉換爲類型枚舉。

0

他可能希望您證明您知道如何循環遍歷枚舉的所有元素,並將每個toString結果與傳入的字符串進行比較。

你說得對,那不是最好的辦法。

0
public enum Medicine { 

    GENERAL_MEDICINE("general_medicine"), 
    PEDIATRICS("pediatrics"); 

    private final String value; 

    Medicine(String v) { 

     value = v; 
    } 

    public String value() { 
     return value; 
    } 

    public static Medicine fromString(String v) { 
     for (Medicine c : Medicine.values()) { 
      if (c.value.equals(v)) { 
       return c; 
      } 
     } 
     throw new IllegalArgumentException(v); 
    } 
}