This is an old question, there are a ton of answers, but I think that the existing answers are off the mark.
"reified" just means real and usually just means the opposite of type erasure.
The big problem related to Java Generics:
- This horrible boxing requirement and disconnect between primitives and reference types. This isn't directly related to reification or type erasure. C#/Scala fix this.
- No self types. JavaFX 8 had to remove "builders" for this reason. Absolutely nothing to do with type erasure. Scala fixes this, not sure about C#.
- No declaration side type variance. C# 4.0/Scala have this. Absolutely nothing to do with type erasure.
- Can't overload
void method(List l) and method(List l). This is due to type erasure but is extremely petty.
- No support for runtime type reflection. This is the heart of type erasure. If you like super advanced compilers that verify and prove as much of your program logic at compile time, you should use reflection as little as possible and this type of type erasure shouldn't bother you. If you like more patchy, scripty, dynamic type programming and don't care so much about a compiler proving as much of your logic correct as possible, then you want better reflection and fixing type erasure is important.