
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がコーディングルールとなっています。
疑問に思い質問しても、明確な理由を答えてくれる人がいません。
何か、違いはあるのでしょうか?
ご教授下さい。
よろしくお願いいたします。

No.1ベストアンサー
- 回答日時:
私も、自分では基本的にコンストラクタ内で初期化を行います。
フィールドは、Hoge hoge = null;というようにnull指定しておくことが多いです。理由は、初期化のすべてを一箇所にまとめて記述したほうがいいからです。フィールドに直接値を生成させる書き方は、場合によって可能なときと不可能なときがありますね。コンストラクタの引数になんらかの値が必要なものだとか、あるいはnewすることができず、ファクトリーなどを使ってインスタンス生成を行うようなものでは、フィールドに処理はかけません。
また、インスタンス作成後に何らかの設定などが必須のオブジェクトでは、インスタンス生成と設定が分かれていると管理しにくいということもあります。
コンストラクタであれば、常に初期化処理をすべてまとめて行えるため、管理がしやすいです。
また、複数のコンストラクタがあった場合も、初期化処理は常に1つのコンストラクタでしか行わないのが普通でしょう。コンストラクタごとに初期化処理を書くのは、その書き方に問題があると思います。増えたコンストラクタは、その中で基本となるコンストラクタを呼び出して初期化を行い、それから必要な処理を行うべきで、この場合は「コンストラクタが増えると漏れの要素になる」ということはありえません。
確かに、
private Hoge hoge = new Hoge();
とした場合
引数がある場合と無い場合では、対応を変えなくてはいけませんね。
コンストラクタでnewする理由が、納得できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
クラスのインスタンス名をクラ...
-
フォームのCheck boxとOLEObjec...
-
C# インスタンスの破棄
-
C#の構造体の開放のしかた
-
JSPでの表示
-
SQLを連続発行する時の正しい(?...
-
Eclipse3でVisualEditorが起動...
-
VB.NET Newしたものを変数に代...
-
VB.NET getとsetの概念がわかり...
-
[VB.NET] インスタンス生成とイ...
-
エクセル(複数インスタンス)...
-
objective-cで分かりにくい所教...
-
「インスタンス」の意味をわか...
-
「タイプ初期化子が例外をスロ...
-
中学のクラス数
-
eclipse-Tomcatでのデバッグに...
-
【sendkeysメソッドが動かずに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
次の日本語の意味を教えて下さい
-
C#「オブジェクト参照が必要で...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
-
C#の構造体の開放のしかた
-
javaのクラスの作り方、エラー...
おすすめ情報