Stringクラス拡張
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*背景 [#t4ecbcbb]
JavaのStringクラスはfinal型でスーパクラスにならなようにな...
*なぜJavaのクラスは拡張できないのか? [#dfadedda]
これは、書き換え可能になると、セキュリティ上の問題と、メ...
わりとしっかりとした回答は下記のURLにありました。(英語)
http://javarevisited.blogspot.jp/2010/10/why-string-is-im...
*解決案 [#n9358239]
委譲パターンでそっくりなクラスを作ってみる。
**デメリット [#s3ba544a]
委譲パターンを使うデメリット
文字列だと""でインスタンスを作ることができた。
インスタンスを作ると、newしないといけなくなる。""でnewと...
**メリット [#hbf291cc]
拡張性を手に入れるということは、自分のニーズに合わせて進...
領域は、メモリの消費を気にせず、セキュリティも気にせず、...
*Sクラスのソースコード [#y61c1aed]
Stringクラスを委譲パターンで表現してみました。
package base;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Locale;
public class S {
private String core;
public int length() {
return core.length();
}
public boolean isEmpty() {
return core.isEmpty();
}
public char charAt(int index) {
return core.charAt(index);
}
public int codePointAt(int index) {
return core.codePointAt(index);
}
public int codePointBefore(int index) {
return core.codePointBefore(index);
}
public int codePointCount(int beginIndex, int endIndex) {
return core.codePointCount(beginIndex, endIndex);
}
public int offsetByCodePoints(int index, int codePointOf...
return core.offsetByCodePoints(index, codePointOffset);
}
public void getChars(int srcBegin, int srcEnd, char[] ds...
core.getChars(srcBegin, srcEnd, dst, dstBegin);
}
public void getBytes(int srcBegin, int srcEnd, byte[] ds...
core.getBytes(srcBegin, srcEnd, dst, dstBegin);
}
public byte[] getBytes(String charsetName) throws Unsupp...
return core.getBytes(charsetName);
}
public byte[] getBytes(Charset charset) {
return core.getBytes(charset);
}
public byte[] getBytes() {
return core.getBytes();
}
public boolean equals(Object anObject) {
return core.equals(anObject);
}
public boolean contentEquals(StringBuffer sb) {
return core.contentEquals(sb);
}
public boolean contentEquals(CharSequence cs) {
return core.contentEquals(cs);
}
public boolean equalsIgnoreCase(String anotherString) {
return core.equalsIgnoreCase(anotherString);
}
public int compareTo(String anotherString) {
return core.compareTo(anotherString);
}
public int compareToIgnoreCase(String str) {
return core.compareToIgnoreCase(str);
}
public boolean regionMatches(int toffset, String other, ...
return core.regionMatches(toffset, other, ooffset, len);
}
public boolean regionMatches(boolean ignoreCase, int tof...
return core.regionMatches(ignoreCase, toffset, other, o...
}
public boolean startsWith(String prefix, int toffset) {
return core.startsWith(prefix, toffset);
}
public boolean startsWith(String prefix) {
return core.startsWith(prefix);
}
public boolean endsWith(String suffix) {
return core.endsWith(suffix);
}
public int hashCode() {
return core.hashCode();
}
public int indexOf(int ch) {
return core.indexOf(ch);
}
public int indexOf(int ch, int fromIndex) {
return core.indexOf(ch, fromIndex);
}
public int lastIndexOf(int ch) {
return core.lastIndexOf(ch);
}
public int lastIndexOf(int ch, int fromIndex) {
return core.lastIndexOf(ch, fromIndex);
}
public int indexOf(String str) {
return core.indexOf(str);
}
public int indexOf(String str, int fromIndex) {
return core.indexOf(str, fromIndex);
}
public int lastIndexOf(String str) {
return core.lastIndexOf(str);
}
public int lastIndexOf(String str, int fromIndex) {
return core.lastIndexOf(str, fromIndex);
}
public String substring(int beginIndex) {
return core.substring(beginIndex);
}
public String substring(int beginIndex, int endIndex) {
return core.substring(beginIndex, endIndex);
}
public CharSequence subSequence(int beginIndex, int endI...
return core.subSequence(beginIndex, endIndex);
}
public String concat(String str) {
return core.concat(str);
}
public String replace(char oldChar, char newChar) {
return core.replace(oldChar, newChar);
}
public boolean matches(String regex) {
return core.matches(regex);
}
public boolean contains(CharSequence s) {
return core.contains(s);
}
public String replaceFirst(String regex, String replacem...
return core.replaceFirst(regex, replacement);
}
public String replaceAll(String regex, String replacemen...
return core.replaceAll(regex, replacement);
}
public String replace(CharSequence target, CharSequence ...
return core.replace(target, replacement);
}
public String[] split(String regex, int limit) {
return core.split(regex, limit);
}
public String[] split(String regex) {
return core.split(regex);
}
public String toLowerCase(Locale locale) {
return core.toLowerCase(locale);
}
public String toLowerCase() {
return core.toLowerCase();
}
public String toUpperCase(Locale locale) {
return core.toUpperCase(locale);
}
public String toUpperCase() {
return core.toUpperCase();
}
public String trim() {
return core.trim();
}
public String toString() {
return core.toString();
}
public char[] toCharArray() {
return core.toCharArray();
}
public String intern() {
return core.intern();
}
}
*JavaのStringクラスのこんなところがダメ [#md34bd19]
ほかにも、個人的に思うこと
シングルクォートでくくれない。JavaScriptを使うとそう思う。
終了行:
*背景 [#t4ecbcbb]
JavaのStringクラスはfinal型でスーパクラスにならなようにな...
*なぜJavaのクラスは拡張できないのか? [#dfadedda]
これは、書き換え可能になると、セキュリティ上の問題と、メ...
わりとしっかりとした回答は下記のURLにありました。(英語)
http://javarevisited.blogspot.jp/2010/10/why-string-is-im...
*解決案 [#n9358239]
委譲パターンでそっくりなクラスを作ってみる。
**デメリット [#s3ba544a]
委譲パターンを使うデメリット
文字列だと""でインスタンスを作ることができた。
インスタンスを作ると、newしないといけなくなる。""でnewと...
**メリット [#hbf291cc]
拡張性を手に入れるということは、自分のニーズに合わせて進...
領域は、メモリの消費を気にせず、セキュリティも気にせず、...
*Sクラスのソースコード [#y61c1aed]
Stringクラスを委譲パターンで表現してみました。
package base;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Locale;
public class S {
private String core;
public int length() {
return core.length();
}
public boolean isEmpty() {
return core.isEmpty();
}
public char charAt(int index) {
return core.charAt(index);
}
public int codePointAt(int index) {
return core.codePointAt(index);
}
public int codePointBefore(int index) {
return core.codePointBefore(index);
}
public int codePointCount(int beginIndex, int endIndex) {
return core.codePointCount(beginIndex, endIndex);
}
public int offsetByCodePoints(int index, int codePointOf...
return core.offsetByCodePoints(index, codePointOffset);
}
public void getChars(int srcBegin, int srcEnd, char[] ds...
core.getChars(srcBegin, srcEnd, dst, dstBegin);
}
public void getBytes(int srcBegin, int srcEnd, byte[] ds...
core.getBytes(srcBegin, srcEnd, dst, dstBegin);
}
public byte[] getBytes(String charsetName) throws Unsupp...
return core.getBytes(charsetName);
}
public byte[] getBytes(Charset charset) {
return core.getBytes(charset);
}
public byte[] getBytes() {
return core.getBytes();
}
public boolean equals(Object anObject) {
return core.equals(anObject);
}
public boolean contentEquals(StringBuffer sb) {
return core.contentEquals(sb);
}
public boolean contentEquals(CharSequence cs) {
return core.contentEquals(cs);
}
public boolean equalsIgnoreCase(String anotherString) {
return core.equalsIgnoreCase(anotherString);
}
public int compareTo(String anotherString) {
return core.compareTo(anotherString);
}
public int compareToIgnoreCase(String str) {
return core.compareToIgnoreCase(str);
}
public boolean regionMatches(int toffset, String other, ...
return core.regionMatches(toffset, other, ooffset, len);
}
public boolean regionMatches(boolean ignoreCase, int tof...
return core.regionMatches(ignoreCase, toffset, other, o...
}
public boolean startsWith(String prefix, int toffset) {
return core.startsWith(prefix, toffset);
}
public boolean startsWith(String prefix) {
return core.startsWith(prefix);
}
public boolean endsWith(String suffix) {
return core.endsWith(suffix);
}
public int hashCode() {
return core.hashCode();
}
public int indexOf(int ch) {
return core.indexOf(ch);
}
public int indexOf(int ch, int fromIndex) {
return core.indexOf(ch, fromIndex);
}
public int lastIndexOf(int ch) {
return core.lastIndexOf(ch);
}
public int lastIndexOf(int ch, int fromIndex) {
return core.lastIndexOf(ch, fromIndex);
}
public int indexOf(String str) {
return core.indexOf(str);
}
public int indexOf(String str, int fromIndex) {
return core.indexOf(str, fromIndex);
}
public int lastIndexOf(String str) {
return core.lastIndexOf(str);
}
public int lastIndexOf(String str, int fromIndex) {
return core.lastIndexOf(str, fromIndex);
}
public String substring(int beginIndex) {
return core.substring(beginIndex);
}
public String substring(int beginIndex, int endIndex) {
return core.substring(beginIndex, endIndex);
}
public CharSequence subSequence(int beginIndex, int endI...
return core.subSequence(beginIndex, endIndex);
}
public String concat(String str) {
return core.concat(str);
}
public String replace(char oldChar, char newChar) {
return core.replace(oldChar, newChar);
}
public boolean matches(String regex) {
return core.matches(regex);
}
public boolean contains(CharSequence s) {
return core.contains(s);
}
public String replaceFirst(String regex, String replacem...
return core.replaceFirst(regex, replacement);
}
public String replaceAll(String regex, String replacemen...
return core.replaceAll(regex, replacement);
}
public String replace(CharSequence target, CharSequence ...
return core.replace(target, replacement);
}
public String[] split(String regex, int limit) {
return core.split(regex, limit);
}
public String[] split(String regex) {
return core.split(regex);
}
public String toLowerCase(Locale locale) {
return core.toLowerCase(locale);
}
public String toLowerCase() {
return core.toLowerCase();
}
public String toUpperCase(Locale locale) {
return core.toUpperCase(locale);
}
public String toUpperCase() {
return core.toUpperCase();
}
public String trim() {
return core.trim();
}
public String toString() {
return core.toString();
}
public char[] toCharArray() {
return core.toCharArray();
}
public String intern() {
return core.intern();
}
}
*JavaのStringクラスのこんなところがダメ [#md34bd19]
ほかにも、個人的に思うこと
シングルクォートでくくれない。JavaScriptを使うとそう思う。
ページ名: