我想要一種基於String生成類型安全類型的簡單方法。基於字符串的簡單Java類型
我有一堆地方,我通常只使用一個字符串來保存不透明的UID(示例),我想離開這一點。
java.lang.String
是最終的。理想情況下,我希望延長String
,但我知道我不能這樣做。我最好的選擇是什麼?
我知道我可以使用封裝,但我正在尋找更有效率的東西,如果可能的話。
更新:我想要一個有意義的名稱,即不只是所有的UUID。
我想要一種基於String生成類型安全類型的簡單方法。基於字符串的簡單Java類型
我有一堆地方,我通常只使用一個字符串來保存不透明的UID(示例),我想離開這一點。
java.lang.String
是最終的。理想情況下,我希望延長String
,但我知道我不能這樣做。我最好的選擇是什麼?
我知道我可以使用封裝,但我正在尋找更有效率的東西,如果可能的話。
更新:我想要一個有意義的名稱,即不只是所有的UUID。
由於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.
你也可以考慮宣佈的基類來實現Serializable
和Comparable<String>
(或類型安全的每個子類Comparable
)。
爲什麼不把它作爲私人會員? – Flexo
爲什麼不直接使用類[java.util.UUID](http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html)? –
@Roddy:因爲我想爲這個類型有一個有意義的名字。 – jldupont