私個人の考えですが、まずメンバはこうします。
java
1class Parameter {
2 private String a; // 必須
3 private Optional<String> b; // 任意
4 private Optional<String> c; // 任意
5}
任意の部分はOptionalにしておくことで「存在しないかもしれないこと」を明示的にします。
その上で「必須項目のみのコンストラクタ」と、「任意項目も含めたコンストラクタ」の2種類を用意します。
java
1// 必須項目のみ
2Parameter(String a) {
3 this(a, null, null);
4}
5// 任意項目も受け付ける 入れないものはnullに設定させる
6Parameter(String a, String b, String c) {
7 this.a = Objects.requireNonNull(a); // 必須なので、nullが入らないようチェック
8 this.b = Optional.ofNullable(b);
9 this.c = Optional.ofNullable(c);
10}
あなたのコードの中で3は最悪だと思います。aが必須である保証がなされません。
あとセッターは不要だと思います。
nullを使いたくないということであれば、ファクトリメソッドという手もあります。ただ、どれを入れないかでメソッドが増えてしまいますが。
java
1// この後のファクトリメソッドで作成することを前提とするため、コンストラクタを非公開にする
2private Parameter(String a, String b, String c) {
3 this.a = a;
4 this.b = Optional.ofNullable(b);
5 this.c = Optional.ofNullable(c);
6}
7
8public static Parameter of(String a, String b, String c) {
9 Objects.requireNonNull(a);
10 return new Parameter(a, b, c);
11}
12
13public static Parameter of(String a) {
14 return of(a, null, null);
15}
16
17public static Parameter withB(String a, String b) {
18 return of(a, b, null);
19}
20
21public static Parameter withC(String a, String c) {
22 return of(a, null, c);
23}
###追記
改めてOptionalについて調べてみたら、Optionalは返り値に使うことを想定していて、メンバに使うのは望ましくないとのことだったので改造
java
1class Parameter {
2 private String a; // 必須
3 private String b; // 任意
4 private String c; // 任意
5
6 private Parameter(String a, String b, String c) {
7 this.a = a;
8 this.b = b;
9 this.c = c;
10 }
11
12 public static Parameter of(String a, String b, String c) {
13 Objects.requireNonNull(a);
14 return new Parameter(a, b, c);
15 }
16
17 public static Parameter of(String a) {
18 return of(a, null, null);
19 }
20
21 public static Parameter withB(String a, String b) {
22 return of(a, b, null);
23 }
24
25 public static Parameter withC(String a, String c) {
26 return of(a, null, c);
27 }
28
29 public String getA() {
30 return a;
31 }
32
33 public Optional<String> getB() {
34 return Optional.ofNullable(b);
35 }
36
37 public Optional<String> getC() {
38 return Optional.ofNullable(c);
39 }
40}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/08 14:52