Хорошо известно, что универсальные типы не выживают в процессе компиляции. Они заменены классами.
Но, тем не менее, информация о типе присутствует в файле класса и может быть отображена с помощью отражения:
public class Demo
{
private List<String> list;
public Demo() throws SecurityException, NoSuchFieldException
{
System.out.println(((Class<?>)((ParameterizedType) getClass().getDeclaredField("list").getGenericType()).getActualTypeArguments()[0]).getName());
}
public static void main(String[] args) throws SecurityException, NoSuchFieldException
{
new Demo();
}
}
При выполнении будет напечатано java.lang.String
.
Может ли JIT использовать это для какой-то оптимизации? Или эта информация с точки зрения JIT бесполезна?