質問するログイン新規登録

質問編集履歴

1

2022/01/13 05:11

投稿

guijiu
guijiu

スコア36

title CHANGED
File without changes
body CHANGED
@@ -1,110 +1,113 @@
1
- #前書き
2
- [Effective Java第3版](https://www.maruzen-publishing.co.jp/item/?book_no=303408)(以下、本書という)を勉強しています。訳あって「項目26 原型を使わない」の項目から勉強を始めましたが、Javaに対する基礎的な理解不足もあり、1ページを読み終わらずしていくつもの「?マーク」が浮かび上がりました。この本は流し読みできるような代物ではないと悟り、反芻(はんすう)して取り組もうと考えています。
3
-
4
- #1.質問
5
- そこで質問があります。
6
- 本書120ページに模範的なコードではない例として次のコードが挙げられています。13行目にstamp.cancel()と記述されていますが、この**__cancel()__**メソッドは、どのような機能を持ち、またどのような由来(何かのインタフェースや抽象メソッドを実装・継承)を持つのでしょうか?(まさかとは思いますが、意味のないコードが記述されていることはないと思いますが、、、)
7
-
8
- ```java
9
-
10
- // 原型のコレクション型 - これをやってはいけない!
11
-
12
- // 私の切手コレクション。Stampインスタンスだけを含む。
13
- private final Collection stamps = new ArrayList();
14
-
15
- // 切手コレクションへのコインの誤った挿入
16
- stamps.add(new Coin(100, "花")); // 「無検査呼び出し」の警告表示
17
-
18
- // 切手コレクションからコインを取り出すまで、エラーになりません。
19
- // 原型のイテレータ型 - これをやってはいけない!
20
- for (Iterator<Stamp> i = stamps.iterator(); i.hasNext(); ) {
21
- Stamp stamp = (Stamp) i.next(); // ClassCastExceptionがスローされる
22
- stamp.cancel();  // <==疑問点 この**__cancel()__**メソッドはどの様な由来がり、機能をもつのか?
23
- }
24
-
25
- ```
26
-
27
- #2.自分で調べたこと
28
- ##2.1 検索
29
- Google検索で、「java  cancel()」をキーワードにして、検索してみましたが、それらしいものは見つかりませんでした。
30
- ##2.2 実行可能な誤ったソースコードを書いてみる
31
-  上記の説明用のソースコードを元に、自分なりに実行可能なコードを書いてみました。一部アクセス修飾子privateについてエラーが解決できなかったので、その部分は削除しました。
32
- 結果、想定されたエラーを生じることが確認できましたし、またCoinオブジェクトを追加しないことでエラーのない動作を確認できました。しかし、**__cancel()__**の機能は理解できませんでした。
33
-
34
- ```
35
- import java.util.ArrayList;
36
- import java.util.Collection;
37
- import java.util.Iterator;
38
-
39
- public class Item26_1 {
40
- public static void main(String[] args) {
41
-
42
- // 原型のコレクション型 - これをやってはいけない!
43
-
44
- // 私の切手コレクション。Stampインスタンスだけを含む。
45
- final Collection stamps = new ArrayList();
46
- // private final Collection stamps = new ArrayList(); // 原型
47
- // 本はアクセス修飾子privateを含むが、
48
- // Modifier 'private' not Allowed here. Make 'stamps' not private.
49
- //(修飾子「private」はここでは許可されません。スタンプを非公開にする)と
50
- // エラー表示される。別途、調査中。
51
-
52
- stamps.add(new Stamp(150, "山"));
53
- stamps.add(new Stamp(250, "川"));
54
- // 切手コレクションへのコインの誤った挿入
55
- stamps.add(new Coin(100, "")); // 「無検査呼び出し」の警告表示
56
-
57
- // 原型のイテレータ型 - これをやてはいけない!
58
- for (Iterator i = stamps.iterator(); i.hasNext(); ) {
59
- Stamp stamp = (Stamp) i.next(); // ClassCastExceptionがスローされる
60
- //stamp.cancel();  // <==疑問点 こcancel()メソッドどの様由来がり、機能をもつのか?
61
- // エラーが生じるのでコメントアウトした。
62
-
63
- System.out.println(stamp.toString());
64
- }
65
- }
66
- }
67
- ```
68
-
69
- ```
70
- public class Stamp {
71
- private int value;
72
- private String design;
73
-
74
- public Stamp(int value, String design){
75
- this.value = value;
76
- this.design = design;
77
- }
78
-
79
- @Override
80
- public String toString() {
81
- return "Stamp{" +
82
- "value=" + value +
83
- ", design='" + design + '\'' +
84
- '}';
85
- }
86
- }
87
-
88
- ```
89
- ```
90
- public class Coin {
91
- private int value;
92
- private String design;
93
-
94
-
95
- public Coin(int value, String design){
96
- this.value = value;
97
- this.design = design;
98
- }
99
-
100
- @Override
101
- public String toString() {
102
- return "Coin{" +
103
- "value=" + value +
104
- ", design='" + design + '\'' +
105
- '}';
106
- }
107
- }
108
-
109
- ```
1
+ #前書き
2
+ [Effective Java第3版](https://www.maruzen-publishing.co.jp/item/?book_no=303408)(以下、本書という)を勉強しています。訳あって「項目26 原型を使わない」の項目から勉強を始めましたが、Javaに対する基礎的な理解不足もあり、1ページを読み終わらずしていくつもの「?マーク」が浮かび上がりました。この本は流し読みできるような代物ではないと悟り、反芻(はんすう)して取り組もうと考えています。
3
+
4
+ #1.質問
5
+ そこで質問があります。
6
+ 本書120ページに模範的なコードではない例として次のコードが挙げられています。13行目にstamp.cancel()と記述されていますが、この**__cancel()__**メソッドは、どのような機能を持ち、またどのような由来(何かのインタフェースや抽象メソッドを実装・継承)を持つのでしょうか?(まさかとは思いますが、意味のないコードが記述されていることはないと思いますが、、、)
7
+
8
+ ```java
9
+
10
+ // 原型のコレクション型 - これをやってはいけない!
11
+
12
+ // 私の切手コレクション。Stampインスタンスだけを含む。
13
+ private final Collection stamps = new ArrayList();
14
+
15
+ // 切手コレクションへのコインの誤った挿入
16
+ stamps.add(new Coin(100, "花")); // 「無検査呼び出し」の警告表示
17
+
18
+ // 切手コレクションからコインを取り出すまで、エラーになりません。
19
+ // 原型のイテレータ型 - これをやってはいけない!
20
+ for (Iterator<Stamp> i = stamps.iterator(); i.hasNext(); ) {
21
+ Stamp stamp = (Stamp) i.next(); // ClassCastExceptionがスローされる
22
+ stamp.cancel();  // <==疑問点 この**__cancel()__**メソッドはどの様な由来がり、機能をもつのか?
23
+ }
24
+
25
+ ```
26
+
27
+ #2.自分で調べたこと
28
+ ##2.1 検索
29
+ Google検索で、「java  cancel()」をキーワードにして、検索してみましたが、それらしいものは見つかりませんでした。
30
+ ##2.2 実行可能な誤ったソースコードを書いてみる
31
+  上記の説明用のソースコードを元に、自分なりに実行可能なコードを書いてみました。一部アクセス修飾子privateについてエラーが解決できなかったので、その部分は削除しました。
32
+ 結果、想定されたエラーを生じることが確認できましたし、またCoinオブジェクトを追加しないことでエラーのない動作を確認できました。しかし、**__cancel()__**の機能は理解できませんでした。
33
+
34
+ ```
35
+ import java.util.ArrayList;
36
+ import java.util.Collection;
37
+ import java.util.Iterator;
38
+
39
+ public class Item26_1 {
40
+ public static void main(String[] args) {
41
+
42
+ // 原型のコレクション型 - これをやってはいけない!
43
+
44
+ // 私の切手コレクション。Stampインスタンスだけを含む。
45
+ final Collection stamps = new ArrayList();
46
+ // private final Collection stamps = new ArrayList(); // 本書での記述
47
+ // 本書での記述ではアクセス修飾子privateを含むが、
48
+ // Modifier 'private' not Allowed here. Make 'stamps' not private.
49
+ //(修飾子「private」はここでは許可されません。スタンプを非公開にする)と
50
+ // エラー表示される。別途、調査中。==>メソッド内の変数のため、アクセス
51
+ // 修飾子をつけることができない(メソッド内の変数は、既に隠蔽されているので
52
+ // アクセス修飾子をつける必要がない)。もし変数をメソッドの外側に置いて、
53
+ // クラス変数とすればアクセス修飾子をつける必要が出てくる。
54
+
55
+ stamps.add(new Stamp(150, ""));
56
+ stamps.add(new Stamp(250, "川"));
57
+ // 切手コレクションへンの誤た挿入
58
+ stamps.add(new Coin(100, "花")); // 「無検査呼び出し」の警告表示
59
+
60
+ // 原型イテレータ型 - これをやっていけい!
61
+ for (Iterator i = stamps.iterator(); i.hasNext(); ) {
62
+ Stamp stamp = (Stamp) i.next(); // ClassCastExceptionがスローされる
63
+ //stamp.cancel();  // <==疑問点 このcancel()メソッドはどの様な由来がり、機能をもつのか?
64
+ // エラーが生じるのでコメントアウトした。
65
+
66
+ System.out.println(stamp.toString());
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ ```
73
+ public class Stamp {
74
+ private int value;
75
+ private String design;
76
+
77
+ public Stamp(int value, String design){
78
+ this.value = value;
79
+ this.design = design;
80
+ }
81
+
82
+ @Override
83
+ public String toString() {
84
+ return "Stamp{" +
85
+ "value=" + value +
86
+ ", design='" + design + '\'' +
87
+ '}';
88
+ }
89
+ }
90
+
91
+ ```
92
+ ```
93
+ public class Coin {
94
+ private int value;
95
+ private String design;
96
+
97
+
98
+ public Coin(int value, String design){
99
+ this.value = value;
100
+ this.design = design;
101
+ }
102
+
103
+ @Override
104
+ public String toString() {
105
+ return "Coin{" +
106
+ "value=" + value +
107
+ ", design='" + design + '\'' +
108
+ '}';
109
+ }
110
+ }
111
+
112
+ ```
110
113
  以上、**__cancel()__**メソッドについての質問です。ご教示のほどよろしくお願いします。