記録として、クラス メソッドを使用して Python でこれを行うことができます。
class super(object):
@classmethod
def usesubclass(cls):
print cls
class sub1(super):
pass
class sub2(super):
pass
このコードを使用すると、sub1.usesubclass()またはを呼び出して、およびクラスsub2.usesubclass()の表現をそれぞれ出力できます。sub1sub2
>>> sub1.usesubclass()
<class '__main__.sub1'>
>>> sub2.usesubclass()
<class '__main__.sub2'>
残念ながら、Java はそのようなメカニズムをサポートしていません。例をコンパイルするSub1.useSubClass()と、コンパイラは をSub1基本的な名前空間として使用してuseSubClass()メソッドを検索しますSuperが、それに関する情報は実際にコードにコンパイルされません。結果のバイトコードでは、呼び出しは単に 1 つの直接呼び出しであり、それ以上のものでは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)。