前回
継承でうまく表現できないという話をしていましたが、継承ではなく委譲を用いれば型の互換の問題は解決できますね。
/** HTMLエスケープされた文字列を表すクラス */
public class HtmlEscapedString {
private String escString;
public HtmlEscapedString(RawString rawString) {
this.escString = escape(rawString.getRawString());
}
/** @return HTMLエスケープされた文字列をString型で返す */
public String getHtmlEscapedString() {
return this.escString;
}
@Override
public String toString() {
return this.escString;
}
String escape(String param) {
// TODO エスケープ処理
return null;
}
}
/** エスケープされていない生の文字列を現すクラス */
public class RawString {
private String rawString;
public RawString(String param) {
this.rawString = param;
}
/** @return 生の文字列をString型で返す */
public String getRawString() {
return this.rawString;
}
@Override
public String toString() {
return this.rawString;
}
}
既存のライブラリをあわせて使うのが難しくなるのが泣き所ですが、たとえば文字列型なら
java.lang.CharSequenceを実装することで正規表現には対応できます。
数値型なら
java.lang.Number
を継承する手もありますが、こちらは継承したところで2次利用がしにくいようですね…。
クラスjava.lang.Numberの使用
投稿日時 : 2007年8月31日 18:35