回答編集履歴
4
困難な理由を追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
宗教上の理由がなければ、`String`クラスを正しく実装するのは相当困難な
|
1
|
+
宗教上の理由がなければ、`String`クラスを正しく実装するのは相当困難(特にHashDoS対策)なため自作しないほうが良いです。
|
2
2
|
|
3
3
|
y_waiwaiさんが指摘している以外にこの2行だけで3つ間違えてます。
|
4
4
|
|
3
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
宗教上の理由がなければ、`String`クラスを正しく実装するのは困難なの
|
1
|
+
宗教上の理由がなければ、`String`クラスを正しく実装するのは相当困難なのため自作しないほうが良いです。
|
2
2
|
|
3
3
|
y_waiwaiさんが指摘している以外にこの2行だけで3つ間違えてます。
|
4
4
|
|
@@ -62,11 +62,17 @@
|
|
62
62
|
|
63
63
|
if (chars == null) {
|
64
64
|
|
65
|
+
// ※引数がnullなのにNullPointerException を発生させるのではなく、IllegalArgumentExceptionを発生させるのはAPIとしてどうなのでしょうか。
|
66
|
+
|
65
|
-
throw new IllegalArgumentException();
|
67
|
+
throw new IllegalArgumentException();
|
66
68
|
|
67
69
|
}
|
68
70
|
|
69
71
|
this.chars = chars.clone(); // 防御的コピー
|
72
|
+
|
73
|
+
// もしくは Arrays.copyOfを使った形でも。
|
74
|
+
|
75
|
+
this.chars = Arrays.copyOf(chars,chars.length);
|
70
76
|
|
71
77
|
}
|
72
78
|
|
2
追記
test
CHANGED
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
char[] rhs = s.toCharArray();
|
82
82
|
|
83
|
-
|
83
|
+
char[] dst = new char[this.chars.length + rhs.length];
|
84
84
|
|
85
85
|
System.arraycopy(this.chars, 0, dst, 0, this.chars.length);
|
86
86
|
|
1
追記
test
CHANGED
@@ -44,13 +44,17 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
+
それとは別のバグですが`for`ループ内の1回目で`return`しているので、1文字目で処理が終わります。
|
48
|
+
|
49
|
+
|
50
|
+
|
47
51
|
---
|
48
52
|
|
49
53
|
|
50
54
|
|
51
55
|
`MStringObj`の`#append`の仕様がよく分かりませんが。
|
52
56
|
|
53
|
-
末尾に追加したいのなら(**未テストコード**)
|
57
|
+
文字列の末尾に追加したいのなら(**未テストコード**)
|
54
58
|
|
55
59
|
```Java
|
56
60
|
|
@@ -94,7 +98,7 @@
|
|
94
98
|
|
95
99
|
---
|
96
100
|
|
97
|
-
余談、悪意を持った人がリスコフの置き換え原則を使って`MStringObj`クラスのサブクラスを宣言し悪用するのを防ぐために`MStringObj`は`final`で宣言してくださいな。
|
101
|
+
余談、悪意を持った人がリスコフの置き換え原則を使って`MStringObj`クラスのサブクラスを宣言し悪用するのを防ぐために`String`クラスと同様に`MStringObj`は`final`で宣言してくださいな。
|
98
102
|
|
99
103
|
```Java
|
100
104
|
|