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

回答編集履歴

1

サンプルと呼ぶには雑すぎるものを追加

2020/10/12 08:00

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -3,4 +3,56 @@
3
3
  Addressの中にはList<Address>があるので、再帰的に格納できます。
4
4
 
5
5
  詳しくは、コンポジットパターンで検索してみてください。
6
- 見れば、理解できると思います。
6
+ 見れば、理解できると思います。
7
+
8
+ サンプルと呼ぶには雑ですが、雰囲気だけわかればよいかと。
9
+ ```java
10
+ public class Address {
11
+ String name;
12
+ List<Address> data = new ArrayList<>();
13
+
14
+ public Address(String name) {
15
+ this.name = name;
16
+ }
17
+ public static void main(String[] args) {
18
+ Address n1 = new Address("東京都");
19
+ Address n2 = new Address("大手町");
20
+ Address n3 = new Address("一丁目");
21
+ Address n4a = new Address("一番地");
22
+ n4a.data.add(new Address("xxxビル"));
23
+ Address n4b = new Address("二番地");
24
+
25
+ n3.data.add(n4a);
26
+ n3.data.add(n4b);
27
+ n2.data.add(n3);
28
+ n1.data.add(n2);
29
+
30
+ n3 = new Address("二丁目");
31
+ n2.data.add(n3);
32
+
33
+ n3.data.add(new Address("三番地"));
34
+ n3.data.add(new Address("四番地"));
35
+
36
+ n2 = new Address("御徒町");
37
+ n1.data.add(n2);
38
+
39
+ n2.data.add(new Address("二丁目"));
40
+ n2.data.add(new Address("三丁目"));
41
+
42
+ System.out.println(n1);
43
+ }
44
+
45
+ public String toString() {
46
+ return toString(1);
47
+ }
48
+
49
+ private String toString(int nest) {
50
+ String s = name + "\n";
51
+ for(Address a : data) {
52
+ s = s + "\t".repeat(nest) + a.toString(nest + 1);
53
+ }
54
+ return s;
55
+ }
56
+ }
57
+
58
+ ```