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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# インスタンスの破棄
-
変数名の付け方
-
private static という変数の修飾
-
生成したインスタンスを削除す...
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
ファイル読み込み/書き込み速度...
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
Form1上にあるTextBox1を Modul...
-
フォームの存在をチェックする方法
-
C#「オブジェクト参照が必要で...
-
SetWindowsHookExで質問
-
データベースから日付型を取得...
-
「インスタンス」の意味をわか...
-
外部ライブラリの動的参照によ...
-
Servletにおけるスレッド間での...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
生成したインスタンスを削除す...
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
フォームの存在をチェックする方法
-
C#「オブジェクト参照が必要で...
-
文字列を日付に変換でParseExce...
-
VB6.0で、DLLを動的に参照したい
-
vb.netでFAXを送信する方法
-
[Visual C#] 優先される処理に...
-
インスタンスを同じ名前で作成...
-
javaのクラスの作り方、エラー...
-
String a = "a"; と String b =...
おすすめ情報