アプリ版:「スタンプのみでお礼する」機能のリリースについて

newするタイミングについてお尋ねします。

その1 コンストラクタで
public class Namida {
private Hoge hoge;
public Namida (){
hoge = new Hoge();
}
}
その2 フィールドで直接
public class Namida {
private Hoge hoge = new Hoge();
}

1と2の場合どちらのほうが良いのでしょうか?
hogeは、必ず使用します。
私は、コンストラクタが増えた場合など、漏れの要素となると考え、
その2が、良いと思っています。
しかし会社ではその1がコーディングルールとなっています。
疑問に思い質問しても、明確な理由を答えてくれる人がいません。
何か、違いはあるのでしょうか?
ご教授下さい。
よろしくお願いいたします。

A 回答 (1件)

私も、自分では基本的にコンストラクタ内で初期化を行います。

フィールドは、Hoge hoge = null;というようにnull指定しておくことが多いです。

理由は、初期化のすべてを一箇所にまとめて記述したほうがいいからです。フィールドに直接値を生成させる書き方は、場合によって可能なときと不可能なときがありますね。コンストラクタの引数になんらかの値が必要なものだとか、あるいはnewすることができず、ファクトリーなどを使ってインスタンス生成を行うようなものでは、フィールドに処理はかけません。

また、インスタンス作成後に何らかの設定などが必須のオブジェクトでは、インスタンス生成と設定が分かれていると管理しにくいということもあります。

コンストラクタであれば、常に初期化処理をすべてまとめて行えるため、管理がしやすいです。

また、複数のコンストラクタがあった場合も、初期化処理は常に1つのコンストラクタでしか行わないのが普通でしょう。コンストラクタごとに初期化処理を書くのは、その書き方に問題があると思います。増えたコンストラクタは、その中で基本となるコンストラクタを呼び出して初期化を行い、それから必要な処理を行うべきで、この場合は「コンストラクタが増えると漏れの要素になる」ということはありえません。
    • good
    • 0
この回答へのお礼

確かに、
private Hoge hoge = new Hoge();
とした場合
引数がある場合と無い場合では、対応を変えなくてはいけませんね。

コンストラクタでnewする理由が、納得できました。
ありがとうございました。

お礼日時:2007/06/22 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!