Единственный способ «передать тип» в Java - передать его объект Class
.
Есть несколько проблем, которые не позволяют вам передать T
в качестве параметра метода:
T
- это тип, а не объект, и поэтому не может быть передан как параметр (или сохранен в переменной, которая фактически является то же самое).
Даже если предыдущая проблема отсутствовала, Java реализация дженериков очень ограничена способом, называемым стиранием типа . Короче говоря, это означает, что фактическое «значение» T
( фактический тип ) доступно только во время типа компиляции (а компилятор выполняет проверки типов и украшает некоторые вызовы с приведением типов), но информация о типе удалена из скомпилированного кода и недоступна в время выполнения .
fromJson()
подпись метода (одна из многих возможных, метод сильно перегружен):
public <T> T fromJson(JsonElement json, java.lang.Class<T> classOfT) throws JsonSyntaxException
, поэтому он ожидает в качестве второго параметра объект Class
. Возможное синтаксически правильное использование будет, например,
gson.fromJson(response, String.class);
или
gson.fromJson(response, response.getClass());
Подробнее Получение объектов класса .
И теперь, когда вы знаете , почему вы не можете делать то, что пытаетесь делать :), вы должны подумать о том, чего вы действительно хотите достичь . Возможно, вы стали жертвой проблемы XY :)