Если общий аргумент List
является необработанным типом, то есть он не имеет общих аргументов, просмотрите my answer to a different question, который использует решение Guava.
В противном случае вы можете выполнить сериализацию/десериализацию с помощью Gson. Это, вероятно, относительно медленно по сравнению с другими решениями, но является самым чистым в реализации. Предполагая, что вы не делаете этого много раз за запрос, это не должно быть хуже, чем любой вызов ввода-вывода, такой как запрос базы данных. Примером ниже является оптимизированная модификация примера использования в Gson API.
Этот пример должен работать для большинства простых классов, для которых не требуется специализированная сериализация.
private final static Gson GSON = new Gson();
public static <T> T cast(Object object, TypeToken<T> token){
String json = GSON.toJson(object);
T result = GSON.fromJson(json, token.getType());
return result;
}
Использование:
List<Map<String,String>> dataAsList = cast(
response.getDataList(), new TypeToken<List<Map<String,String>>>(){});
Отказ от ответственности:
В конкретной ситуации вы описать это решение не будет работать, так как тип значения Карты объекта и Gson не знает, какой тип вы хотите Перевести в. Я не уверен, что это вызовет исключение или просто оставит его как JsonObject
или какой-либо другой тип. Я постараюсь исследовать это больше.
«Но я не знаю, как преобразовать нетипизированный ответ response.getDataList()» в типизированную версию ». -> ну, просто бросьте его: '(List
Это то, что я не хочу делать. Я не хочу получать предупреждения типа, и я не хочу подавлять предупреждения. – edu00085
Нечто похожее здесь, но для списков и без использования TypeToken: http://stackoverflow.com/a/2848268/4089265 – edu00085