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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

18909閲覧

eclipseの呼び出し階層を開くは鵜呑みにできない?

lupus_dingo

総合スコア257

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

2クリップ

投稿2016/08/24 23:39

編集2016/08/31 15:02

お世話になってます。

eclipseに呼び出し階層を開くという機能がありますが本当にな呼び出されてるかはソースを確認しないとわからないのでしょうか?

以前この機能を使用したら大量のクラスが同階層に表示されたので本当に呼び出されてるか呼出し元を開いて呼出し先クラス名でソース内を検索したところ、そのクラスは呼び出されていませんでした。

Aclass.test() このメソッドの呼び出し階層を開く

Xclass.check() このメソッド内で大量に呼び出されてる

でもXclassでソース内検索してもヒットしないのでAclassは呼び出されていない
Bclass.test() 呼び出されてる
Cclass.test() 呼び出されてる

呼び出し元の判断はどのように行われているのでしょうか?ちなみにAclass、Bclass、Cclass、、は同じインターフェイスを継承しています。

###追記
テラテイルにログインできくなりコメント遅くなりすみません。

バージョンは3.5です。
Xclass.checkの呼び出し元を開くと大量のクラスが表示されます。
その中の任意のクラスをダブルクリックで開くと
確かにcheckメソッドにカーソルが指定されていますが、
別のクラスのメソッド(Aclass.check)でした。
よく見ると呼び出し方が特殊で
makeCheck(Aclass.class).check(aaa);
のような感じで呼びだされており、
makeCheckの引数によって戻り値が動的に変わることがわかりました。
(引数がAclass.classなら戻り値は<Aclass.class> BaseInterfaceなど)

※すでに回答頂きましたが追記が途切れてしまっていたため今更ですが
書く予定だったことを記載します。

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

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

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

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

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

argius

2016/08/25 01:03

Eclipseのバージョンは何でしょうか? それと、呼び出し階層ビューに表示されたクラスを展開すると呼び出しているメソッドが表示されて、そのメソッドを選択すると行番号が表示されますよね?さらにダブルクリックするとジャンプできます。Xclass.check()についてこの操作を行ったときにどうなりますか?
argius

2016/08/27 15:59

この↑質問をしたのは、この機能がそのような挙動をするとしたら、バグの可能性があると疑っているからです。 呼び出された場所が表示されているなら、そこにジャンプしたら呼び出すコードが書かれていないとおかしいですよね? なので、実際にそういう操作をしたときにどうなるかによって、バグかどうかが判断出来るかも知れません。Eclipseの中身までは見ていないので確証はありません。そういう現象が起こったという話も聞いたことが無いので。
argius

2016/08/31 05:20

追記ありがとうございました。すみません、質問を正しく理解していなかったみたいです。yubaさんの回答の通りだと思います。
lupus_dingo

2016/08/31 15:03

追記が途切れてしまい申し訳ありませんでした。 アドバイスありがとうございました。
guest

回答1

0

ベストアンサー

呼び出し元の判断はどのように行われているのでしょうか?ちなみにAclass、Bclass、Cclass、、は同じインターフェイスを継承しています。

まさにこのせいですね。
Eclipseに限らずIntelliJもVisualStudio(C#)も同じ基準で、つまり継承関係があるなら同一のメソッドであるという基準で呼び出しを判定します。
Aclass.testに限定して使用を探すオプションはないか?
それは、難しいです。
実行時に実際に呼ばれるメソッド本体が決定されることこそ多態性であり、どのメソッド本体を呼んでいるかというのは原理的に静的には決定できないことなのです。

投稿2016/08/31 03:22

yuba

総合スコア5568

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

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

lupus_dingo

2016/08/31 15:06

回答ありがとうございます。 ということは、鵜呑みにできないというのはあながち間違っていない ということでしょうか? 呼び出し階層を開いた時は階層1つ1つで、 それがインターフェースでないか確認する必要があるということですね。
yuba

2016/08/31 15:07

そうお考えになってください。 少なくとも、列挙漏れはありえません。
lupus_dingo

2016/08/31 15:13

すばやい回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問