kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

型パラメータのErasure

(snip)
今まで、Java では型パラメータは単純に Object になるものだと思っていたんだけど、もしかして extends 使うと一番左側のクラスになる・・・?

http://d.hatena.ne.jp/bleis-tift/20090731/1249037236

ちょっと気になったので、JLS(3rd Edition)を調べてみました。すると、4.6 Type Erasureのところに、こんな記述が。

(snip)
The erasure of a type variable (§4.4) is the erasure of its leftmost bound.

http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.6

型パラメータでextends使って(複数の)境界を指定した場合、型パラメータのErasureは境界の一番左側の型(のErasure)になる、ということのようですね。つまり、型パラメータTがT extends A & B & ...の場合、erasure(T) = erasure(A)になると。