- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィールドでのnewとコンストラクタでのnew)
フィールドでのnewとコンストラクタでのnew
このQ&Aのポイント
- newするタイミングについてお尋ねします。
- 1と2の場合どちらのほうが良いのでしょうか?hogeは、必ず使用します。
- 私は、コンストラクタが増えた場合など、漏れの要素となると考え、その2が、良いと思っています。しかし会社ではその1がコーディングルールとなっています。疑問に思い質問しても、明確な理由を答えてくれる人がいません。何か、違いはあるのでしょうか?ご教授下さい。よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#49664
回答No.1
私も、自分では基本的にコンストラクタ内で初期化を行います。フィールドは、Hoge hoge = null;というようにnull指定しておくことが多いです。 理由は、初期化のすべてを一箇所にまとめて記述したほうがいいからです。フィールドに直接値を生成させる書き方は、場合によって可能なときと不可能なときがありますね。コンストラクタの引数になんらかの値が必要なものだとか、あるいはnewすることができず、ファクトリーなどを使ってインスタンス生成を行うようなものでは、フィールドに処理はかけません。 また、インスタンス作成後に何らかの設定などが必須のオブジェクトでは、インスタンス生成と設定が分かれていると管理しにくいということもあります。 コンストラクタであれば、常に初期化処理をすべてまとめて行えるため、管理がしやすいです。 また、複数のコンストラクタがあった場合も、初期化処理は常に1つのコンストラクタでしか行わないのが普通でしょう。コンストラクタごとに初期化処理を書くのは、その書き方に問題があると思います。増えたコンストラクタは、その中で基本となるコンストラクタを呼び出して初期化を行い、それから必要な処理を行うべきで、この場合は「コンストラクタが増えると漏れの要素になる」ということはありえません。
お礼
確かに、 private Hoge hoge = new Hoge(); とした場合 引数がある場合と無い場合では、対応を変えなくてはいけませんね。 コンストラクタでnewする理由が、納得できました。 ありがとうございました。