
javaの学習中なのですが、以下のBeforeコード、BBB内でBBBをインスタンス化(staticイニシャライザー?)しているのですが、BBBのコンストラクタでの処理をAfterのように分岐させたいのですが、可能でしょうか?
---Before---
AAA.class
public class AAA {
BBB bbb = BBB.getInstance();
}
BBB.class
public class BBB {
private static BBB instance = new BBB();
public BBB getInstance(){
return instance;
}
private BBB() {
// コンストラクタ処理
}
}
---After---
AAA.class
public class AAA {
// ここでどうにかしてisHogeを渡してBBBのコンストラクタでの処理を分岐させたい
BBB bbb = BBB.getInstance();
}
BBB.class
public class BBB {
private static BBB instance = new BBB(isHoge);
public BBB getInstance(){
return instance;
}
private BBB(boolean isHoge) {
if (isHoge) {
// hoge
} else {
// not hoge
}
}
}
No.1ベストアンサー
- 回答日時:
○ isHoge はいつどのように決まるのか?
○「---After---」のやり方は適切なのでしょうか?
これは、プログラム実行中には BBBのインスタンスは1つしか存在しない、という方式(シングルトンと呼ばれる)です。
コンストラクタも実行終了までの間に、ただの1度しか呼ばれません。
シングルトンが適切なのは、次の場合です。
(1)どこかの時点(少なくとも、最初のAAAのインタンスが作られるより前)で isHogeが決定され、二度と変更されない。
(2)isHogeは変化するが、その変更内容を AAAのインスタンスの全てで共用する。
(1) のケースなら
private static BBB instance = null ;にしておいて、getInstance 実行時に instanceがnullのときだけ new BBB(isHoge)する。
(2)のケースなら
コンストラクタではisHogeの分岐はせず、切り替えるためのメソッド( setHogeとか)を用意して使う。
等が考えられます。
ただ、
「// ここでどうにかしてisHogeを渡してBBBのコンストラクタでの処理を分岐させたい」
というコメントがAAAの中にあることから考えると
(3)AAAのインスタンス毎に isHogeのものと !isHogeのものが混在する。
を求めているようにも思えます。
こちらの場合だと
・isHogeと!isHogeの2つのBBBインスタンスを使う。(シングルトンの変形)
・シングルトンの必要が無い。普通に new BBB(isHoge)できるようにする
等になります。
まずは「---After---」の設計が適切かどうかを見極める必要があります。
丁寧なご回答ありがとうございます。シングルトンという用語を知らなかったので、調べる良いきっかけになりました。大変助かりました。(1)のパターンで解決しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
オブジェクト参照がオブジェク...
-
フォームのCheck boxとOLEObjec...
-
JSPでの表示
-
プログラミング、シューティン...
-
「インスタンス」の意味をわか...
-
変数の参照でエラーが出てしま...
-
中学のクラス数
-
「タイプ初期化子が例外をスロ...
-
0歳児の指しゃぶりに関して
-
河合塾
-
VBスクリプトでテキストファイ...
-
javascriptからjavaを呼び出したい
-
エクセルVBAで、条件に一致する...
-
進学校通ってたんですけど、眼...
-
canvasで表示されてる画像を1...
-
河合塾のクラス分けについて
-
多人数のじゃんけんプログラム
-
ヒグマを撃退
-
C# 「データが失なわれる可能性...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
次の日本語の意味を教えて下さい
-
C#「オブジェクト参照が必要で...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
-
C#の構造体の開放のしかた
-
javaのクラスの作り方、エラー...
おすすめ情報