0

これはJava言語に関連しています。

スーパークラスAとサブクラスXおよびYがあるとします。AにXとYのタイプを知る必要のあるメソッドがあります(これは外部ライブラリです)。

AにというメソッドがありsomeMethod()ます。私の質問は次のとおりです。someMethod()実装では、XまたはYのどちらから呼び出されているかを確認する方法はありますか?

不明な点がある場合はお知らせください。

編集^2:

クラスAの具体的な状況はこんな感じ。

public void delete() {
    Datastore ds = Dao.instance().getDatabase();
    ds.delete(this.getClass(),this.id);
}

X.delete()とY.delete()を実行できるようにしたいと思います

4

2 に答える 2

3

はい:単に呼び出しますgetClass()。例えば:

class A {
  public void someMethod() {
    System.out.println(getClass().getSimpleName());
  }
}

これは、呼び出されたオブジェクトのランタイムクラスのいずれかXまたはそれに応じて出力されます。Y

于 2012-05-15T15:58:11.477 に答える
3

メソッドがXで呼び出されているかYで呼び出されているかは、次を使用して簡単に確認できますgetClass()

public void someMethod() {
    System.out.println(getClass()); // Will display the execution-time type
}

ただし、もちろん、そのパブリックメソッドは(XまたはYだけでなく)任意のクラスから呼び出すことができます。その情報を取得する必要がある場合は、スタックトレースを取得する必要があります。これは、インライン化などのために常に信頼できるとは限りません。正しいアクションのコースは、この情報が必要な理由によって異なります。

于 2012-05-15T15:58:29.357 に答える