我有一个从服务中阅读JSON的方法,我使用Gson进行序列化,并使用类型参数编写了以下方法。
public T getDeserializedJSON(Class<T> aClass,String url)
{
Reader r = getJSONDataAsReader(url);
Gson gson = new Gson();
return gson.fromJson(r, aClass);
}
我正在使用json,它只返回一个类型的数组,例如。
[
{ "prop":"value" }
{ "prop":"value" }
]
我有一个Map到这个对象的java类,我们称之为MyClass。但是,要使用我的方法,我需要这样做:
RestClient<ArrayList<MyClass>> restClient = new RestClient<ArrayList<MyClass>>();
ArrayList<MyClass> results = restClient.getDeserializedJSON(ArrayList<MyClass>.class, url);
但是,我不知道该用什么语法来实现它,只传递ArrayList.class是行不通的。
那么有没有办法去掉Class参数或者我怎么得到MyClass的ArrayList的类呢?
6条答案
按热度按时间ev7lccsx1#
您可以使用Bozho的解决方案,或者使用以下方法避免创建临时数组列表:
这个解决方案的唯一问题是,您必须使用
@SuppressWarnings("unchecked")
来抑制未检查的警告。yvfmudvl2#
你不能。你必须使用不安全的类型转换:
vh0rcniy3#
作为对此的后续行动,我在Gson文档中发现了这个。
它解决了安全获取类型的问题,但TypeToken类是特定于Gson的。
mhd8tkvw4#
如果您使用的是
SpringFramework
,则可以按如下方式使用ParameterizedTypeReference
:wi3ka0sx5#
我有一个类似的场景,但我有一个使用数组而不是ArrayList的解决方案
这里是反序列化方法作用
然后,您可以按如下方式继续处理列表:
ru9i0ody6#
这取决于您的要求,但如果您可以在此使用阵列,则可以提供Class:
MyClass[].class