2016-10-11 50 views
0

例如,有一個方法public void set_gender(String gender) {},請確保只有"male""female"傳遞給此方法而不使用枚舉如何確保將特定參數傳遞給方法?

此外,當方法聲明爲public void set_gender(String... params) {}時,如何滿足此需求?

如果沒有這種方式來實現這一點,當有人傳遞一個字符串,這種方法無法理解時,我怎麼能在IDE中發出警告,就像它在Android Studio中如何傳遞值不是在某個類中定義的標誌。

+0

public static final String MALE =「male」'或者更好的使用布爾值'public static final boolean MALE = true'和'public static final boolean FEMALE = false'這個方法的任何問題? –

+0

使'setGender'成爲一個私有函數,並創建兩個新方法'setMale'和'setFemale',它們將調用'setGender',但枚舉會更好 - 爲什麼不使用它呢? –

回答

2

這4種方法我能想到的:

  1. 使用預先定義的方法,無需參數:

    public void setMale() { /* TODO: Implement */ } 
    
        public void setFemale() { /* TODO: Implement */ } 
    
  2. 保持setGender()但使用boolean值作爲參數,而不是簡單的Stringtrue意味着它是男性,false女性(或者反過來):

    public void setGender(boolean male) { /* TODO: Implement */ } 
    
  3. 保持setGender()同時使用String作爲它的參數,並拋出一個IllegalArgumentException如果提供的參數不符合範圍規定:

    public void setGender(String gender) { 
         if (!"male".equalsIgnoreCase(gender) && !"female".equalsIgnoreCase(gender)) { 
          throw new IllegalArgumentException("Bad parameter"); 
         } 
         /* TODO: Implement */ 
        } 
    
  4. 只要使用枚舉,坦率地說,它的設計與這個確切的用例有關。或者如果你真的擔心表現的話,你可以選擇IntDef

哦,作爲另外,這個問題你問:

如果有意識到這一點沒有這樣的方式,我怎麼可能放棄在 IDE警告,當有人路過一個字符串,這個方法不能 理解,就像它在Android Studio中的工作方式,當我通過 的值不是在某個類內定義的標誌。

他們通過使用IntDef來實現此目的。 ;)

1

有這種情況下的StringDef註釋。您可以用它標記參數,然後在運行時檢查它以驗證。