Моя цель - разработать класс, который может выводить объект определенного класса.Как передать параметризованный класс в качестве аргумента
public class GetMe<T> {
public T get() {
Object obj = generateObject();
return (T) obj;
}
}
Теперь я знаю, что это невозможно из-за стирания. Итак, мы можем передать экземпляр класса и использовать его для создания.
public class GetMe<T> {
public GetMe<T>(Class<T> clazz) {
this.clazz = clazz;
}
public T get() {
Object obj = generateObject();
return clazz.cast(obj);
}
}
Это отлично работает! Пока класс не параметризуется. Если да, то у меня проблема.
Мне не разрешено использовать List<String>.class
. Если я передаю параметр ParameterizedType (который сам по себе трудно сгенерировать), то нет метода cast
.
Есть ли выход из этой трясины?
Существует способ сохранить generics во время выполнения, но что такое 'generateObject' и почему он не может вернуть объект типа' T'? – ide
посмотрите на эти примеры, может помочь: http://serdom.eu/ser/2007/03/25/java-generics-instantiating-objects-of-type-parameter-without-using-class-literal –
Предположим, generateObject() '- сторонний десериализатор. Я знаю, что это тип T, потому что я сериализую его раньше, но метод тем не менее возвращает Object. Это также может быть результатом метода.invoke, который возвращает объект только. –