假设我有一个带有静态方法的Java类,如下所示:
class A
{
static void foo()
{
// Which class invoked me?
}
}
并且进一步假设类A具有任意数量的子类:
class B extends A { }
class C extends A { }
class D extends A { }
...
现在考虑以下方法调用:
A.foo(); B.foo(); C.foo(); D.foo(); ...
我的问题是,方法如何foo()告诉哪个类正在调用它?
Dan*_*wak 10
它不能,这是静态方法问题的一部分.就编译器而言A.foo(),B.foo()它们完全相同.实际上,它们编译为相同的字节码.你无法获得更多类似的东西.
如果您确实需要这种信息,请使用单例并foo()转换为实例方法.如果您仍然喜欢静态语法,则可以构建外观A.foo().