回答編集履歴

1

修正

2020/05/13 11:03

投稿

m.ts10806
m.ts10806

スコア80875

test CHANGED
@@ -2,8 +2,146 @@
2
2
 
3
3
  ```java
4
4
 
5
-
6
-
7
5
  setHoge(getHoge()-1);
8
6
 
9
7
  ```
8
+
9
+
10
+
11
+ > 今の書き方ではうまくいきません。なぜでしょうか?
12
+
13
+
14
+
15
+ 「うまくいかない」が何が起きているかによるのですけど、
16
+
17
+ 現状のコードはSampleModel の値ではなくSampleUse のプロパティbattery を更新してるだけです。
18
+
19
+ どこのどの情報を更新したいのでしょうか。
20
+
21
+
22
+
23
+ # 整理
24
+
25
+
26
+
27
+ この作りだとSampleUse に必要なのはprivateにしたSampleModelだけだと思います。
28
+
29
+ SampleUseにデータそのものを持ってしまってはModelに持っているものとは別物になります。
30
+
31
+
32
+
33
+ SampleModel
34
+
35
+ ```java
36
+
37
+ package sample.model;
38
+
39
+
40
+
41
+ import lombok.Data;
42
+
43
+
44
+
45
+ @Data
46
+
47
+ public class SampleModel {
48
+
49
+ private int battery;
50
+
51
+ }
52
+
53
+
54
+
55
+ ```
56
+
57
+ SampleUse
58
+
59
+ ```java
60
+
61
+ package sample.use;
62
+
63
+
64
+
65
+ import sample.model.SampleModel;
66
+
67
+
68
+
69
+ public class SampleUse {
70
+
71
+ private SampleModel model;
72
+
73
+ public SampleUse(int defaultBattery){
74
+
75
+ this.model = new SampleModel();
76
+
77
+ this.model.setBattery(defaultBattery);
78
+
79
+ }
80
+
81
+ public void useBattery() {
82
+
83
+ this.model.setBattery(this.model.getBattery()-1);
84
+
85
+ }
86
+
87
+ public void outputBattery() {
88
+
89
+ System.out.println(this.model.getBattery());
90
+
91
+ }
92
+
93
+
94
+
95
+ }
96
+
97
+
98
+
99
+ ```
100
+
101
+ SampleController
102
+
103
+ ```java
104
+
105
+ package sample.controller;
106
+
107
+
108
+
109
+ import sample.use.SampleUse;
110
+
111
+
112
+
113
+ public class SampleController {
114
+
115
+
116
+
117
+ public static void main(String[] args) {
118
+
119
+ SampleUse use = new SampleUse(5);
120
+
121
+ use.outputBattery();
122
+
123
+ use.useBattery();
124
+
125
+ use.outputBattery();
126
+
127
+ }
128
+
129
+
130
+
131
+ }
132
+
133
+
134
+
135
+ ```
136
+
137
+
138
+
139
+
140
+
141
+ ※Getter,Setterを自身の書くコードに置きたくないので[lombok](https://projectlombok.org/)を利用しました。
142
+
143
+ ※sampleプロジェクトとはいえ、役割できちんとパッケージをわけるべきと考え、勝手にパッケージ追加しました
144
+
145
+ ※個人的にプロパティでnewしたりデータ代入したりロジックっぽいの書くの嫌いなのでコンストラクタで行っています
146
+
147
+ ※nowBattery()では名前から「今の値を返す」ように見えるので、メソッド名変えてます。