例えばこんなコード
public class Test {
private String name;
pblic Test(String name){ //①
this.name = name;
}
public void setTest(String name){ //②
this.name = name;
}
}
これにおいて、setterとコンストラクタは
同じことしてるようだけど、
どっちがいいの?
どうやって使い分けるの?について
結論
処理は同じだが、クラス利用側から
見たら異なる意図をもつ
①の意図
以上の例ではデフォルトコンストラクタを提供しないため、
Testクラスは
「nameという属性指定が必須であり、
既定値(デフォルト値)は存在しない」
という意図となります。
②の意図
setterメソッドによるメンバ変数代入は、
オブジェクトの生成後にいつでも
「nameという属性値を変更できる」
という設計を反映したものです。
補足
後者setterメソッドを提供することは、
クラスTestは「ミュータブル(Mutable)/可変なクラスである」ことを意味します。
反対に、全てのメンバ変数をfinal宣言し、
コンストラクタでのみメンバ変数を設定し、
setterメソッドを提供しないクラスは、
イミュータブル(Immutable)/不変なクラスと呼ばれます。
クラスをイミュータブルとすることは、
Javaのクラス設計においては非常に重要な意味を持ちます。
参考
https://teratail.com/questions/47965
Adsenseコード
2017-08-19
クラスを作る時、setterとコンストラクタは同じことしてね?
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿