2012-09-23 18 views
1

我想要一種基於String生成類型安全類型的簡單方法。基於字符串的簡單Java類型

我有一堆地方,我通常只使用一個字符串來保存不透明的UID(示例),我想離開這一點。

java.lang.String是最終的。理想情況下,我希望延長String,但我知道我不能這樣做。我最好的選擇是什麼?

我知道我可以使用封裝,但我正在尋找更有效率的東西,如果可能的話。

更新:我想要一個有意義的名稱,即不只是所有的UUID。

+2

爲什麼不把它作爲私人會員? – Flexo

+0

爲什麼不直接使用類[java.util.UUID](http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html)? –

+0

@Roddy:因爲我想爲這個類型有一個有意義的名字。 – jldupont

回答

3

字符串從CharSequence

繼承如果更改引用類型的CharSequence,您可以使用StringBuilder或其他任何可變的CharSequence。

希望它有幫助。

3

由於String宣佈爲final,我認爲封裝是唯一可以做的事情。爲了提供一定程度的插件兼容性,您可以聲明您的類實現CharSequence

public class TypeSafeStringBase implements CharSequence { 
    protected final String mString; 
    protected TypeSafeStringBase(String string) { 
     mString = string; 
    } 
    @Override 
    public char charAt(int index) { 
     return mString.charAt(index); 
    } 
    @Override 
    public int length() { 
     return mString.length(); 
    } 
    @Override 
    public CharSequence subSequence(int start, int end) { 
     return mString.subSequence(start, end); 
    } 
    @Override 
    public String toString() { 
     return mString; 
    } 
} 

public class ParamName extends TypeSafeStringBase { 
    ParamName(String string) { 
     super(string); 
    } 
} 

public class Prompt extends TypeSafeStringBase { 
    Prompt(String string) { 
     super(string); 
    } 
} 

// etc. 

你也可以考慮宣佈的基類來實現SerializableComparable<String>(或類型安全的每個子類Comparable)。