Почему этот код работает, несмотря на эффект type erasure?

235
13 сентября 2017, 11:51

Известно, что во время рантайма конкретный дженерик-тип неизвестен, т.к. стирается (type erasure), из-за этого даже в, к примеру в Scala, приспособлены отдельные костыли.

Однако, вот Java-код, возвращающий информацию о том, что в списке содержатся не какие-то элементы, а именно строки. Объясните, в чем подвох?

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
public class Main {
    public List<String> stringList = Arrays.asList("one", "two");
    public static void main(String[] args) throws Exception {
        Field field = Main.class.getField("stringList");
        Type genericFieldType = field.getGenericType();
        if (genericFieldType instanceof ParameterizedType) {
            ParameterizedType aType = (ParameterizedType) genericFieldType;
            Type[] fieldArgTypes = aType.getActualTypeArguments();
            for (Type fieldArgType : fieldArgTypes) {
                Class fieldArgClass = (Class) fieldArgType;
                System.out.println("fieldArgClass = " + fieldArgClass);
            }
        }
    }
}
READ ALSO
Java как передать название файла по сокету?

Java как передать название файла по сокету?

Приложение будет передавать множество файлов размером в 2-10 мегабайт и мне важно что бы они были с изначальным названиемДля этого нужно отправлять...

327
Загрузка аватарки в приложение

Загрузка аватарки в приложение

Как загружать аватарку в приложение, где хранить и как отображать? аватарка прилетает с сервера, через ретрофитМожно пожалуйста с нуля, по подробнее...

202
Как сгруппировать классы для модели MVC

Как сгруппировать классы для модели MVC

Программа на swing, которая предлагает пользователю загрузить n файлов excel и затем выдает итоговый отчет в виде одного excel файла

235
как занулить первые 4 бита в байте на java

как занулить первые 4 бита в байте на java

Предположим что есть байт b = 63В битах это будет 0011 1111

232