
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で質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Java java final 1 2022/06/10 22:49
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- その他(プログラミング・Web制作) pythonのcondaコマンドの仕様について 2 2022/06/24 00:13
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
javaのクラスの作り方、エラー...
-
変数名の付け方
-
VB.NET)ボックスからラベルにデ...
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
Delphiでインスタンスが作成さ...
-
VC#での24ビットbmp形式での保...
-
インスタンスフィールドの初期...
-
Generics extends ObjectとObje...
-
非staticフィールドを参照でき...
-
インスタンスを同じ名前で作成...
-
C# WebRequestでcookieの設定
-
VB.netで標準モジュールからフ...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
インスタンスを同じ名前で作成...
-
newしないインスタンス?実体化...
-
フォームの存在をチェックする方法
-
String a = "a"; と String b =...
-
C#のメモリ解放についてご教授...
-
vb.netでFAXを送信する方法
-
他のファイルの変数参照
-
Delphiでインスタンスが作成さ...
おすすめ情報