例えばこんなコード 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 件のコメント:
コメントを投稿