2011-07-08 80 views
-2

我想創建一個像下面example的方法,以確保用戶只能夠提供對應於Name類中定義的常量之一的值:將字符串作爲單獨類型傳遞的最佳方式是什麼?

public class Name{ 
public static String JOHN = "John"; 
public static String MARY = "Mary"; 
public static String TAB = "\t"; 
} 

public void example(Name name){ 
test(name); 
} 

public void test(String name){ 
System.out.println(name); 
} 

基本上example方法只需要一個String參數。但是我想限制用戶可以傳遞的字符串的類型,所以如果我使用參數String name它將對任何類型的輸入都是開放的。

有沒有更簡單的方法來做到這一點?

+8

枚舉枚舉枚舉。 –

+1

誰會命名他們的孩子「\ t」? –

+0

有人太多S.O.因果報應? – Gromyko

回答

2

創建一個枚舉:

public enum Name { 
    John, Mary 
} 
public void example(Name name){ 
    test(name); 
} 

你也可以的方法,狀態和構造函數添加到您的枚舉,以及:

public enum Name { 
    John(23), Mary(20) 

    private int age; 

    private Name(int age) { 
    this.age = age; 
    } 

    public int getAge() { 
    return age; 
    } 
} 

我發現我做那種事很多。

因爲我看現在你已經添加了TAB之一,這個怎麼樣:

public enum Name { 
    JOHN("John"), Mary("Mary"), TAB("\n") 

    private int str; 

    private Name(int str) { 
    this.str = str; 
    } 

    public String toString() { 
    return str; 
    } 
} 
+0

同上複製..:|我們在想什麼......:p –

+1

並不是每個人的名字都可能是那個年齡;),而是一個很好的使用屬性的例子。 –

+0

@Peter Lawrey,好點,實際上我打算使用字符串示例,但後來決定將它混合使用int,因爲在這種情況下,枚舉的toString將足夠好。 – dgrant

4

使用枚舉?

public enum Name{ 
John, Mary; 
} 

public void test(Name name){ 
System.out.println(name); 
} 

混合概念是一個壞主意,TAB顯然不是一個人的名字。但是,如果這個例子不同,你可以這樣做。

public enum Name{ 
John, Mary, 
TAB { public String toString() { return "\n"; } }; 
} 
+0

我的約翰和瑪麗的例子不好,因爲我實際上想創建一個代表不同「特殊字符」 - 「\ n」,「\ t」,「\ r」等的類因此,在這種情況下,使用一個帶'String'參數的構造函數似乎是要走的路,而不是像在這裏所做的那樣添加括號中的'toString'方法。你怎麼看? – Gromyko

+0

這取決於您是否希望允許任何字符串或僅允許某些字符串。你也可以有兩個方法,一個取名字而另一個只取特殊字符。 –

0

字符串不能被子類化,因此你不能立即做你想做的事。

既可以考慮使用ENUM,也可以在構造函數中顯式測試傳遞的字符串作爲有效值,如果不可接受則拋出RuntimeException。

0

我認爲您的代碼,因爲你逝去稱爲 名 是類型 名稱的對象的錯誤 成爲例子,但進入測試,你正在得到一個字符串,它是從例子中獲得通過名稱,所以我不知道你在做什麼。 您能否詳細說明一下?

0

爲什麼不使用ENUM?

public enum Name{ 
    John, Marry 
} 

,然後你可以編寫方法一樣

public void example (Name name){ 
    test(name); 
} 
相關問題