質問編集履歴
8
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
##### 提案?
|
122
122
|
|
123
|
-
コンパニオンオブジェクトのファクトリメソッドを具象クラスのフィールドの初期化(適当な値を代入し、createでセットする感じ)に利用することで一応役割は分担できた。
|
123
|
+
コンパニオンオブジェクトのファクトリメソッドを具象クラスのフィールドの初期化(適当な値を代入し、createでセットする感じ)に利用することで一応役割は分担できた。不格好ではありますが。。(-_-;)
|
124
124
|
|
125
125
|
|
126
126
|
|
7
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
##### 所感
|
10
10
|
|
11
|
-
Car.manufacturerだけは具象クラスの名称に紐づくので、各具象クラスのインスタンスが作られた段階でセットされてほしい
|
11
|
+
Car.manufacturerだけは具象クラスの名称に紐づくので、各具象クラスのインスタンスが作られた段階で自動的にセットされてほしい(createでセットしたくない)ので分離しているからがめんどくささの原因か。
|
12
12
|
|
13
13
|
|
14
14
|
|
6
補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -5,6 +5,12 @@
|
|
5
5
|
##### 悩みどころ
|
6
6
|
|
7
7
|
抽象クラスからoverrideしたcreateメソッド(セッター)からインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの(抽象クラスで用意した方の)定義がそもそも不要という。(やってることがおかしい?)
|
8
|
+
|
9
|
+
##### 所感
|
10
|
+
|
11
|
+
Car.manufacturerだけは具象クラスの名称に紐づくので、各具象クラスのインスタンスが作られた段階でセットされてほしいので分離している(createでセットしない)からがめんどくささの原因か。
|
12
|
+
|
13
|
+
|
8
14
|
|
9
15
|
|
10
16
|
|
5
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
val ...
|
20
20
|
|
21
|
-
def create: Car
|
21
|
+
def create(c: String, ...): Car
|
22
22
|
|
23
23
|
}
|
24
24
|
|
@@ -26,11 +26,11 @@
|
|
26
26
|
|
27
27
|
case class ToyotaCar(color: String) extends Car("トヨタ") {
|
28
28
|
|
29
|
-
override def create: ToyotaCar = {
|
29
|
+
override def create(c: String, ...): ToyotaCar = {
|
30
30
|
|
31
31
|
ToyotaCar(
|
32
32
|
|
33
|
-
color =
|
33
|
+
color = c,
|
34
34
|
|
35
35
|
...
|
36
36
|
|
@@ -44,11 +44,11 @@
|
|
44
44
|
|
45
45
|
case class NissanCar(color: String) extends Car("日産") {
|
46
46
|
|
47
|
-
override def create: NissanCar = {
|
47
|
+
override def create(c: String, ...): NissanCar = {
|
48
48
|
|
49
49
|
NissanCar(
|
50
50
|
|
51
|
-
color =
|
51
|
+
color = c,
|
52
52
|
|
53
53
|
...
|
54
54
|
|
@@ -92,9 +92,9 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
-
val toyota = ToyotaCar.create
|
95
|
+
val toyota = ToyotaCar.create("red", ...)
|
96
96
|
|
97
|
-
val nissan = NissanCar.create
|
97
|
+
val nissan = NissanCar.create("blue", ...)
|
98
98
|
|
99
99
|
|
100
100
|
|
@@ -142,9 +142,9 @@
|
|
142
142
|
|
143
143
|
|
144
144
|
|
145
|
-
val toyota = ToyotaCar.apply.create
|
145
|
+
val toyota = ToyotaCar.apply.create("red", ...)
|
146
146
|
|
147
|
-
val nissan = NissanCar.apply.create
|
147
|
+
val nissan = NissanCar.apply.create("blue", ...)
|
148
148
|
|
149
149
|
|
150
150
|
|
4
補足追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -108,6 +108,52 @@
|
|
108
108
|
|
109
109
|
// メーカー: 日産, 色: blue, ...
|
110
110
|
|
111
|
+
```
|
111
112
|
|
112
113
|
|
114
|
+
|
115
|
+
##### 提案?
|
116
|
+
|
117
|
+
コンパニオンオブジェクトのファクトリメソッドを具象クラスのフィールドの初期化(適当な値を代入し、createでセットする感じ)に利用することで一応役割は分担できた。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
```scala
|
122
|
+
|
123
|
+
...
|
124
|
+
|
125
|
+
object ToyotaCar {
|
126
|
+
|
127
|
+
def apply: ToyotaCar = {
|
128
|
+
|
129
|
+
ToyotaCar(
|
130
|
+
|
131
|
+
color = "",
|
132
|
+
|
133
|
+
...
|
134
|
+
|
135
|
+
)
|
136
|
+
|
137
|
+
}
|
138
|
+
|
139
|
+
}
|
140
|
+
|
141
|
+
...
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
val toyota = ToyotaCar.apply.create
|
146
|
+
|
147
|
+
val nissan = NissanCar.apply.create
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
println(s"メーカー: ${toyota.manufacturer}, 色: ${toyota.color}, ...")
|
152
|
+
|
153
|
+
println(s"メーカー: ${nissan.manufacturer}, 色: ${nissan.color}, ...")
|
154
|
+
|
155
|
+
// メーカー: トヨタ, 色: red, ...
|
156
|
+
|
157
|
+
// メーカー: 日産, 色: blue, ...
|
158
|
+
|
113
159
|
```
|
3
内容修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
##### 悩みどころ
|
6
6
|
|
7
|
-
抽象クラスからoverrideしたcreateメソッドからインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの(抽象クラスで用意した方の)定義がそもそも不要という。(やってることがおかしい?)
|
7
|
+
抽象クラスからoverrideしたcreateメソッド(セッター)からインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの(抽象クラスで用意した方の)定義がそもそも不要という。(やってることがおかしい?)
|
8
8
|
|
9
9
|
|
10
10
|
|
2
補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
##### 悩みどころ
|
6
6
|
|
7
|
-
抽象クラスからoverrideしたcreateメソッドからインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの定義がそもそも不要という。(やってることがおかしい?)
|
7
|
+
抽象クラスからoverrideしたcreateメソッドからインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの(抽象クラスで用意した方の)定義がそもそも不要という。(やってることがおかしい?)
|
8
8
|
|
9
9
|
|
10
10
|
|
1
補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
以下の様に、車(Car)抽象クラスから各メーカーの車具象クラス(**Car)へ継承させているとき、case classを使っているので
|
1
|
+
以下の様に、車(Car)抽象クラスから各メーカーの車具象クラス(**Car)へ継承させているとき、case classを使っているのでコンパニオンオブジェクトを使ってnew を使わずにインスタンスを作りたいのですが、結局コンパニオンオブジェクトにも具象クラスでコンストラクタみたいに使っているメソッドを書かなければならず冗長になっています。何か他にスマートな書き方がありますでしょうか?
|
2
2
|
|
3
3
|
|
4
|
+
|
5
|
+
##### 悩みどころ
|
6
|
+
|
7
|
+
抽象クラスからoverrideしたcreateメソッドからインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの定義がそもそも不要という。(やってることがおかしい?)
|
4
8
|
|
5
9
|
|
6
10
|
|