記録として、クラス メソッドを使用して Python でこれを行うことができます。
class super(object):
@classmethod
def usesubclass(cls):
print cls
class sub1(super):
pass
class sub2(super):
pass
このコードを使用すると、sub1.usesubclass()
またはを呼び出して、およびクラスsub2.usesubclass()
の表現をそれぞれ出力できます。sub1
sub2
>>> 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)
。