Параметр generic type не скомпилирован в байт-код, поэтому он не доступен во время выполнения. ArrayList < String> просто ArrayList во время выполнения. . Ближайшая вещь, которую вы можете достичь, заключается в том, чтобы добавлять проверки выполнения вовремя. Например, коллекция класс предоставляет decorator, что делает именно это:
List l = Collections.checkedList(new ArrayList<String>(), String.class);
l.add("Jave uses erasure");
l.add(14);
Если список был создан просто как ArrayList < String>, два дополнения преуспеет во время выполнения. Тем не менее, с реализацией оболочки, каждое добавление элемента проверяется, поэтому второй вызов вызовет исключение ClassCastException.
см. Ответ überSkeet или Darren Gilroy на http://stackoverflow.com/questions/1127923/specifying-generic-collection-type-param-at-runtime-java-reflection –
«Мне нужно указать тип« String » во время выполнения "- в основном вы этого не делаете, вам нужно объяснить, что вы пытаетесь сделать более подробно. –
Я не следую этому вопросу. Вы пытаетесь создать 'ArrayList <>', не зная общий аргумент во время компиляции? На самом деле не имеет смысла использовать статическую типизацию (стирание кажется несущественным, кстати). Если охватывающий экземпляр или метод определяет общий параметр, то это может быть то, что вы хотите. –