Javaのジェネリックは1.4以前のバイナリ仕様との互換のために、コンパイルの時点で型引数情報が消去され非ジェネリックプログラミングされたかのようなコードに変換されます。この変換を 型消去(イレイジャ) と呼びます。 型消去、通常のプログラミングにもたまに影響を与えます(例えば List.toArray() がなぜか引数として一見不要な E[] 型の配列オブジェクトを要求するなどします)が、何より影響を受けるのがリフレクションごりごりのフレームワークプログラミングやライブラリプログラミングにおいてです。型消去に伴って、実行時型情報からも型引数の部分が抜け落ちてしまいますから(そこだけは残しておいてくれれば良かったのに!)。 具体的にはどんなことになるかというと、たとえばみんな大好きEBean(うそ、僕が大好き)なら、エンティティクラスを指定して対応するDBテーブルからデータを取り出すのに
![ジェネリック型引数を実行時型情報に残す方法がある - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/dea85f59e9f45b341db3f82f57c4c47099cdd60f/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgyJUI4JUUzJTgyJUE3JUUzJTgzJThEJUUzJTgzJUFBJUUzJTgzJTgzJUUzJTgyJUFGJUU1JTlFJThCJUU1JUJDJTk1JUU2JTk1JUIwJUUzJTgyJTkyJUU1JUFFJTlGJUU4JUExJThDJUU2JTk5JTgyJUU1JTlFJThCJUU2JTgzJTg1JUU1JUEwJUIxJUUzJTgxJUFCJUU2JUFFJThCJUUzJTgxJTk5JUU2JTk2JUI5JUU2JUIzJTk1JUUzJTgxJThDJUUzJTgxJTgyJUUzJTgyJThCJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0xNzE2NjM1ZDgzMTdhNzA1MzA4YTE5MmM3ZTNmMGM3OA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQweXViYSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZWY5MmZhZmU4NmMwZjQwODc0Yzc2MzE2YTEwY2FiMTE%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Dd9cfcc2249f20f7059b8723350e9fe15)