初期化
変数をフィールド上で初期化するか、コンストラクタで初期化するかで迷ったときはコンストラクタので初期化をしたほうがよさそう。
フィールド上で初期化
class Sample { private Hoge hoge = new Hoge(); }
コンストラクタで初期化
public class Sample { private Hoge hoge; public Sample() { this.hoge = new Hoge(); } }
理由は以下の通り。
1.初期化する変数が複数ある場合に、全てを一箇所にまとめて記述したほうがわかりやすい。
2.初期化する変数をほとんど使うことがなかった場合(例だとhoge)、それを保持するクラスを生成したときの変数を生成する時間とメモリが無駄になる。
3.初期化は動的にしたい。
。。。と調べた感じは上記の通りだが、個人的には必ずしもそうでない気がする。
例えばFlyweightパターンでメモリの消費を少なくするためにフィールドで初期化してインスタンスをプールする、
またフレームワークでそもそもnewしなくてもインスタンスを生成したりするので、この課題に関してはそんなに神経質にならなくていい気がしてきた。