方法可以知道调用它的Object的类型(即调用它的子类型)

时间:2012-05-15 15:56:30

标签: java

这与Java语言有关。

假设我有一个超类A和X和Y的子类。我在A中有一个方法需要知道X和Y的类型(它是一个外部库)。

我在A上有一个名为someMethod()的方法。我的问题是:在someMethod()实现中是否有办法确定它是由X还是Y调用?

如果不清楚,请告诉我。

EDIT ^ 2:

A类的具体情况如下所示。

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

我希望能够做X.delete()和Y.delete()

2 个答案:

答案 0 :(得分:3)

是的:只需致电getClass()即可。例如:

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

这将打印出XY,具体取决于调用它的对象的运行时类。

答案 1 :(得分:3)

您可以使用getClass()轻松找出该方法是否在 X或Y上调用

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

但当然公共方法可以通过任何类(不仅仅是X或Y)来调用。如果您需要获取 信息,则需要获取堆栈跟踪 - 由于内联等原因可能并不总是可靠。正确的操作过程将取决于为什么