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

回答編集履歴

1

修正

2020/05/13 11:03

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,5 +1,74 @@
1
1
  get-1をsetすれば良いのでは。
2
2
  ```java
3
+ setHoge(getHoge()-1);
4
+ ```
3
5
 
6
+ > 今の書き方ではうまくいきません。なぜでしょうか?
7
+
8
+ 「うまくいかない」が何が起きているかによるのですけど、
9
+ 現状のコードはSampleModel の値ではなくSampleUse のプロパティbattery を更新してるだけです。
10
+ どこのどの情報を更新したいのでしょうか。
11
+
12
+ # 整理
13
+
14
+ この作りだとSampleUse に必要なのはprivateにしたSampleModelだけだと思います。
15
+ SampleUseにデータそのものを持ってしまってはModelに持っているものとは別物になります。
16
+
17
+ SampleModel
18
+ ```java
4
- setHoge(getHoge()-1);
19
+ package sample.model;
20
+
21
+ import lombok.Data;
22
+
23
+ @Data
24
+ public class SampleModel {
25
+ private int battery;
26
+ }
27
+
5
- ```
28
+ ```
29
+ SampleUse
30
+ ```java
31
+ package sample.use;
32
+
33
+ import sample.model.SampleModel;
34
+
35
+ public class SampleUse {
36
+ private SampleModel model;
37
+ public SampleUse(int defaultBattery){
38
+ this.model = new SampleModel();
39
+ this.model.setBattery(defaultBattery);
40
+ }
41
+ public void useBattery() {
42
+ this.model.setBattery(this.model.getBattery()-1);
43
+ }
44
+ public void outputBattery() {
45
+ System.out.println(this.model.getBattery());
46
+ }
47
+
48
+ }
49
+
50
+ ```
51
+ SampleController
52
+ ```java
53
+ package sample.controller;
54
+
55
+ import sample.use.SampleUse;
56
+
57
+ public class SampleController {
58
+
59
+ public static void main(String[] args) {
60
+ SampleUse use = new SampleUse(5);
61
+ use.outputBattery();
62
+ use.useBattery();
63
+ use.outputBattery();
64
+ }
65
+
66
+ }
67
+
68
+ ```
69
+
70
+
71
+ ※Getter,Setterを自身の書くコードに置きたくないので[lombok](https://projectlombok.org/)を利用しました。
72
+ ※sampleプロジェクトとはいえ、役割できちんとパッケージをわけるべきと考え、勝手にパッケージ追加しました
73
+ ※個人的にプロパティでnewしたりデータ代入したりロジックっぽいの書くの嫌いなのでコンストラクタで行っています
74
+ ※nowBattery()では名前から「今の値を返す」ように見えるので、メソッド名変えてます。