假设我有一个带有静态方法的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()
告诉哪个类正在调用它?
它不能,这是静态方法问题的一部分.就编译器而言A.foo()
,B.foo()
它们完全相同.实际上,它们编译为相同的字节码.你无法获得更多类似的东西.
如果您确实需要这种信息,请使用单例并foo()
转换为实例方法.如果您仍然喜欢静态语法,则可以构建外观A.foo()
.