Gson的API fromJson()的使用方法的第二个参数是一个type类型
ApiResponseModel<CashierModel> result = GsonUtils.fromJson(str, Type);
例如上面的代码,那么,如何才能正确的从范型中获取Type呢?比方说如何获取Test中Test的类型呢?Test是不确定的类。
首先,我们定一个Callback的子类,代码如下:
class Test<Test> extends Callback<Test>{
...省略代码
}
Callback类的结构如下:
class Callback<T>{
public Type type;
public Callback(){
type = getType(getClass());
}
static void getType(Class<?> subClass){
Type superclass =subClass.getGenericSuperclass();
if (superclass instanceof Class) {
throw new RuntimeException("Missing type parameter.");
}
ParameterizedType parameterized = (ParameterizedType)superclass;
return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
}
}
这段对代码就可以解决问题。下面简单的来分析下这段简介的代码。这里的getClass方法是用来获取的是Test类,而superclass对应的就是Callback类。当采用匿名内部类的形式的时候,这种方法就能够正确的获取type,按照我的写法,其实也可以不用superClass来实现。总结下来,获取范型类型的方法就是以下代码:
ParameterizedType parameterized = (ParameterizedType)class;
Type type = $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);