質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2861閲覧

Java メッソドの呼び出し元インスタンスを特定する方法

parupao

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/05/06 13:37

質問失礼します。
何らかのクラスのメソッド、ここではCクラスの、methodCメソッドとします。
他のクラスのインスタンスから、methodCメソッドが呼び出されたときに、methodCメソッド内で呼び出し元インスタンスを特定したいのですが、方法が分かりません。
コードを載せますので、アドバイスを頂けると幸いです。
@やりたい事 呼び出し元のインスタンスによって処理を分岐させたい。

Java

1コード 2class A { 3 public static void main(String[] args) { 4 C c = new C(); 5 B b1 = new B(); 6 B b2 = new B(); 7 b1.setC(c); b2.setC(c); 8 b1.callC(); b2.callC(); 9 } 10} 11class B { 12 C c; 13 void setC(C c) { 14 this.c = c; 15 } 16 void callC() { 17 c.methodC(); 18 } 19} 20class C { 21 void methodC() {} 22  //呼び出し元がb1かb2かで処理を分岐させたい。 23} 24 25読んでくださり有難うございます。回答も頂けると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

parupao

2022/05/06 13:54

情報が不足していました。 追記します。 methodCメソッドには呼び出し元を特定できるような引数は渡せないものとします。 代わりに、 classCのコンストラクタで呼び出し元の候補となるインスタンスを引数として渡します。 class C { B b1; B b2; C(B b1, B b2) { this.b1 = b1; this.b2 = b2; } void methodC() {} }
jimbe

2022/05/06 19:50 編集

質問への追加情報は、質問を編集して追加してください、 > 呼び出し元のインスタンスによって処理を分岐させたい >には呼び出し元を特定できるような引数は渡せない 不可能ではありませんが、設計として良くないと思います。 呼び出し元の何かの情報によって分岐するのであればそれを引数として貰うべきですし、それが呼び出し元自身だと言うのなら、呼び出し元を引数として貰うべきでしょう。 何故このような条件・状況なのでしょうか。
guest

回答2

0

ベストアンサー

methodC()がこのままでは、不可能だと思います。

判定できるような情報を引数として渡す必要があります。

java

1 void callC() { 2 c.methodC(this); 3 } 4... 5 void methodC(B b) { /* bで判定 */} 6

別案として、「これから誰が呼ぶか」を伝えておく手もあります。

java

1 void callC() { 2 c.setContextB(this); 3 c.methodC(); 4 } 5... 6 void setContextB(B b) { this.contextB = b; } 7 void methodC() { /* this.contextB で判定 */}

投稿2022/05/06 13:44

編集2022/05/06 14:01
int32_t

総合スコア20941

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

parupao

2022/05/06 13:55

回答してくださりありがとうございます。 追記させていただきましたので、もしよければ回答よろしくお願いします。
int32_t

2022/05/06 14:02

別案を足してみました。これもダメならもう不可能でしょう。
parupao

2022/05/06 15:28

有難うございます。 参考にさせて頂きます。
guest

0

投稿2022/05/07 04:54

編集2022/05/07 05:01
jimbe

総合スコア12696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問