回答編集履歴

4

困難な理由を追記

2018/07/22 11:57

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,4 +1,4 @@
1
- 宗教上の理由がなければ、`String`クラスを正しく実装するのは相当困難なため自作しないほうが良いです。
1
+ 宗教上の理由がなければ、`String`クラスを正しく実装するのは相当困難(特にHashDoS対策)なため自作しないほうが良いです。
2
2
 
3
3
  y_waiwaiさんが指摘している以外にこの2行だけで3つ間違えてます。
4
4
 

3

追記

2018/07/22 11:57

投稿

umyu
umyu

スコア5846

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

追記

2018/07/22 11:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  char[] rhs = s.toCharArray();
82
82
 
83
- int[] dst = new int[this.chars.length + rhs.length];
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

追記

2018/07/22 10:40

投稿

umyu
umyu

スコア5846

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