16

Java ではObject.getClass、 の型シグネチャがありpublic final Class<?> getClass()ますが、JavaDoc のコメントでは、実際には「Class<? extends |X|>|X| は、getClass呼び出される式の静的型の消去です」と記載されています。

これは実際に当てはまり、IDE などでサポートされているコンパイラによって強制されますが、どのような魔法がこれを可能にしますか? コンパイラはこのメソッドを特別な方法で扱いますか? それは実際getClass()に各タイプのオーバーライドを生成しますか?

これは単にコンパイル時の構成であることを理解しています。実行時には、Class のジェネリック型パラメーターが何であったかによって違いはありません。

4

1 に答える 1

10

はい、コンパイラはメソッドを特別に扱います。たとえば、 ScopeクラスcreateGetClassMethod()の Eclipse のコンパイラでの呼び出しを参照してください。(同じクラス内に、このメソッドへの呼び出しが他にもいくつかあります。)

于 2013-09-17T16:55:02.143 に答える