作为记录,您可以使用类方法在 Python 中执行此操作:
class super(object):
@classmethod
def usesubclass(cls):
print cls
class sub1(super):
pass
class sub2(super):
pass
使用此代码,您可以调用sub1.usesubclass()
or sub2.usesubclass()
,这将分别打印sub1
和sub2
类的表示:
>>> sub1.usesubclass()
<class '__main__.sub1'>
>>> sub2.usesubclass()
<class '__main__.sub2'>
然而,不幸的是,Java 不支持这种机制。当您Sub1.useSubClass()
在您的示例中编译时,编译器将简单地Sub1
用作基本命名空间来查找 中的useSubClass()
方法Super
,但实际上并没有关于该方法的信息被编译成代码。在生成的字节码中,调用只是直接调用,仅此Super.useSubClass()
而已。
我同情你的困境,但 Java 就是这样。我认为,您最接近的可能是以下代码:
public class Super {
public static <T extends Super> void useSubClass(Class<T> sub) {
}
}
然后将该方法显式调用为Super.useSubClass(Sub1.class)
or 或Super.useSubClass(Sub2.class)
。