1
JavaIntermediate#collections
The compiler removes generic type information after compile-time checks and replaces type parameters with their bounds (or Object), so generic type info isn't available at runtime via reflection on the raw type.
List<String> l1 = new ArrayList<>(); List<Integer> l2 = new ArrayList<>(); l1.getClass() == l2.getClass(); // true, both are just ArrayList at runtime