有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这与Java语言有关

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

我有一个名为someMethod()的方法。我的问题是:在someMethod()实现中,有没有一种方法可以确定它是由X还是Y调用的

如果不清楚,请告诉我

编辑^2:

A班的具体情况是这样的

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

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


共 (2) 个答案

  1. # 1 楼答案

    使用^{},您可以很容易地确定在X或Y上调用的是

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

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

  2. # 2 楼答案

    是的:只需拨打^{}。例如:

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

    这将根据调用对象的运行时类打印出XY