Хорошо известно, что универсальные типы не выживают в процессе компиляции. Они заменены приведением классов.
Но, тем не менее, информация о типе присутствует в файле класса, и ее можно увидеть с помощью отражения:
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 бесполезна?