Здесь:
Type elementType = ((ParameterizedType) listType).getActualTypeArguments()[0];
elementType
относится к универсальному типу, объявленному для поля List
.
Например, для поля List<String>
xxx
, Type
будет экземпляром java.lang.String
Class
.
И проблема в том, что тогда вы делаете:
Object obj1 = elementType.getClass().newInstance(); //HERE FAILS TO CREATE INSTANCE OF LIST TYPE
Но elementType.getClass()
все еще не возвращает класс java.lang.String
. Вместо него возвращается класс java.lang.String
класса, который просто Class
.
То, что вы хотите, - это приведение Типа к Классу, чтобы затем использовать его:
Class<?> clazz = (Class<?>) elementType;
Object obj1 = clazz.newInstance();
Или лучше, поскольку Class.newInstance()
устарело:
Object obj1 = null;
try {
obj1 = clazz.getDeclaredConstructor().newInstance();
} catch (InvocationTargetException e) {
// handle the exception
}
Обратите внимание, что Type
не всегда Class
, это могут быть другие вещи. Но в реальном случае так и будет.