2010-04-14 97 views
1

我希望能夠創建一個像String對象一樣創建的對象,並在創建時驗證String值是否是一個適當的選項。如何創建使用字符串類型行爲進行創建的對象?

I.E. SpecificString可以是「Bob」或「Jim」。

SpecificString BadName =「Sam」//引發異常 SpecificString GoodName =「Bob」//不拋出異常。

最重要的功能是當它被訪問時它必須在訪問時像一個字符串一樣行爲。

printf(SpecificString); //輸出Bob。

這可能嗎?

+0

增加了一些更多的規範。當我調用printf(SpecificString)時,它應該像字符串一樣輸出。 – 2010-04-14 14:48:50

回答

2

如前所述,使用=運算符是不可能的。

對於printf(SpecificString)你應該重寫Object.toString()

@Override 
public String toString(){ 
    //return a String representation of the Object; 
} 
+0

太棒了!的toString()。聽起來不錯。 – 2010-04-14 23:03:14

1

編輯:哎呀,認爲這是一個C#問題入手:)

Java不允許用戶定義的轉換,所以這是不會的,你已經證明的方式來工作。您需要一個靜態的Parse方法或構造函數或類似的東西。

如果只有某些允許的值,您可以使用枚舉嗎?

1

如果我正確理解你的觀點,你想確保給定的對象是一個字符串限於一組特定的可能值。

我會去爲Enums,在這種情況下。如果您使用的是最新的Java版本,則只需使用標準Enums,或者彙總可能更適合您的特定問題的「舊」DIY版本。

對於後者的例子,看到this

2

你可能想用這個的enum。 Enums是在1.5版本中引入Java的。你可以在官方文檔here中閱讀。

如果出於某種原因,您無法使用Java 1.5,則Apache commons-lang庫具有相當好的替代性。

2

如果問題是它可以創建像一個字符串又名。 String s =「foo」答案是否定的。只有字符串可以這樣構造,並且字符串是最終的,因此您將無法爲其定義子類...

如果您尋找從給定Set創建字符串的最佳方法,那麼您可以使用StringFactory或看看其他答案...

0

你不能。但是,如果你能做到這一點,就不可能區分一個正常的歸屬和一個拋出異常的異常(假設你的異常沒有被選中)或者對歸因做任何事情。 使用一個方法調用你會向使用你的類的某人證明存在一些驗證,並且在Eclipse中我可以看到這個驗證是用ctrl + click單擊的。

相關問題