Java Erasure
“When a generic type is instantiated, the compiler translates those types by a technique called type erasure — a process where the compiler removes all information related to type parameters and type arguments within a class or method. Type erasure enables Java applications that use generics to maintain binary compatibility with Java libraries and applications that were created before generics.”
“The Java compiler employs type erasure when objects are instantiated except when objects are instantiated from anonymous classes.” reference 1
Motivated by HX question on using reflection reference 2