Есть в любом случае, чтобы сделать что-то вроде этого:Можно ли использовать переменную как общий тип в java?
Type type = new TypeToken<MyHappyClass>(){}.getType();
List<type> = new LinkedList<type>();
спасибо заранее
========================= =============================================
Я попытаюсь объяснить, что мне нужно, надеюсь, что я не делаю ничего смешного
Я использую restTemplate.getForObject для получения данных из веб-службы. Однако они используют пользовательский MediaType, поэтому я реализую CustomMessageConverter, чтобы restTemplate понял этот MediaType и преобразовал его в мой объект данных.
Проблема заключается в том, что этот объект данных использует дженерики. Все объекты, возвращенные из этого веб-сервиса, имеют некоторые общие поля и некоторые специфические, поэтому, чтобы сопоставить это, а не повторить код, я создал общий элемент, и каждый ресурс простирается от элемента.
Итак, мой MessageConverter создается таким образом:
public class MyMessageConverter<T extends Item> extends AbstractHttpMessageConverter<T>
И мой readInternal выглядит следующим образом:
@Override
protected T readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
InputStream istream = inputMessage.getBody();
String responseString = IOUtils.toString(istream);
Type type = new TypeToken<GeneralItem<?>>(){}.getType();
GeneralItem<?> resource = new Gson().fromJson(responseString, type);
return (T) resource.getItem();
}
Но это не работает, потому что мне нужен тип clazz вместо шаблона (*) для gson для его анализа. Я иду не так?
№ Пожалуйста, объясните, что вы на самом деле пытаетесь сделать. –
Нет, Java generics - это функция времени компиляции, поэтому к моменту запуска кода и переменным есть значения, слишком поздно, чтобы заполнить параметры типа. – neuronaut
В связанном сообщении используйте 'GeneralItem' вместо' List'/'ArrayList'. –