import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.ArrayList; import java.util.List; public class GenericReflect { public static void main(String[] args) { TypeVariable[] tv = List.class.getTypeParameters(); System.out.println(tv[0].getName()); // E class StringList extends ArrayList<String> { } Type type = StringList.class.getGenericSuperclass(); System.out.println(type); ParameterizedType pt = (ParameterizedType) type; System.out.println(pt.getActualTypeArguments()[0]); } }