質問編集履歴

8

修正

2021/12/02 06:26

投稿

yochun02
yochun02

スコア76

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

修正

2021/12/02 06:26

投稿

yochun02
yochun02

スコア76

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ##### 所感
10
10
 
11
- Car.manufacturerだけは具象クラスの名称に紐づくので、各具象クラスのインスタンスが作られた段階でセットされてほしいので分離している(createでセットしない)からがめんどくささの原因か。
11
+ Car.manufacturerだけは具象クラスの名称に紐づくので、各具象クラスのインスタンスが作られた段階で自動的にセットされてほしい(createでセットしたくない)ので分離しているからがめんどくささの原因か。
12
12
 
13
13
 
14
14
 

6

補足

2021/12/02 06:25

投稿

yochun02
yochun02

スコア76

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

修正

2021/12/02 06:23

投稿

yochun02
yochun02

スコア76

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 = "red",
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 = "blue",
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

補足追加

2021/12/02 06:18

投稿

yochun02
yochun02

スコア76

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

内容修正

2021/12/02 06:15

投稿

yochun02
yochun02

スコア76

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

補足

2021/12/02 05:52

投稿

yochun02
yochun02

スコア76

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

補足

2021/12/02 05:06

投稿

yochun02
yochun02

スコア76

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,10 @@
1
- 以下の様に、車(Car)抽象クラスから各メーカーの車具象クラス(**Car)へ継承させているとき、case classを使っているのでグルトンオブジェクトを使ってnew を使わずにインスタンスを作りたいのですが、結局グルトンオブジェクトにも具象クラスでコンストラクタみたいに使っているメソッドを書かなければならず冗長になっています。何か他にスマートな書き方がありますでしょうか?
1
+ 以下の様に、車(Car)抽象クラスから各メーカーの車具象クラス(**Car)へ継承させているとき、case classを使っているのでパニオンオブジェクトを使ってnew を使わずにインスタンスを作りたいのですが、結局パニオンオブジェクトにも具象クラスでコンストラクタみたいに使っているメソッドを書かなければならず冗長になっています。何か他にスマートな書き方がありますでしょうか?
2
2
 
3
3
 
4
+
5
+ ##### 悩みどころ
6
+
7
+ 抽象クラスからoverrideしたcreateメソッドからインスタンスを作りたいが、コンパニオンオブジェクトのファクトリメソッドからインスタンスを作るとなるとこの定義がそもそも不要という。(やってることがおかしい?)
4
8
 
5
9
 
6
10