This isn't necessarily due to erasure. This actually about boxing. Reified generics is one way to solve this. Another option is tagged pointers. That is how OCaml handles this[1].
[1] http://stackoverflow.com/questions/3773985/why-is-an-int-in-...
edit: clarity