Adsenseコード

2017-08-19

クラスを作る時、setterとコンストラクタは同じことしてね?

例えばこんなコード


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

0 件のコメント:

コメントを投稿