parameterizedType.getActualTypeArguments()[0]是什么意思?

Posted LQS_Android

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了parameterizedType.getActualTypeArguments()[0]是什么意思?相关的知识,希望对你有一定的参考价值。

不管是使用Gson还是FastJSon结合泛型解析数据时都会用到这个,那么它是什么意思呢?

使用FastJson时:

private ApiResponse<T> parseResponse(Response response, JsonCallback<T> callback) 
        String message = null;
        int status = response.code();
        boolean success = response.isSuccessful();
        ApiResponse<T> result = new ApiResponse<>();
        //获取convert实例对象,解析数据
        Convert convert = ApiService.sConvert;
        try 
            String content = response.body().string();
            if (success) 
                if (callback != null) 
                    ParameterizedType type = (ParameterizedType) callback.getClass().getGenericSuperclass();
                    Type argument = type.getActualTypeArguments()[0];
                    result.body = (T) convert.convert(content, argument);
                 else if (mType != null) 
                    result.body = (T) convert.convert(content, mType);
                  else 
                    Log.e("request", "parseResponse: 无法解析 ");
                
             else 
                message = content;
            
         catch (Exception e) 
            message = e.getMessage();
            success = false;
            status = 0;
        
        result.success = success;
        result.status = status;
        result.message = message;
        return result;
    

或者使用Gson时:

         T model = null;
         try 
                Gson gson = new Gson();
                ParameterizedType parameterizedType = (ParameterizedType) requestCallBack.getClass().getGenericSuperclass();
                Type type = parameterizedType.getActualTypeArguments()[0];//获得超类的泛型参数的实际类型
                model = gson.fromJson(result, type);
                requestCallBack.onSuccess(result, model);
            catch (JsonSyntaxException e) 
                requestCallBack.OnFailure(e);
           

getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或void)的直接超类的 Type,然后将其转ParameterizedType。
getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。[0]就是这个数组中第一个了,简而言之就是获得超类的泛型参数的实际类型。

以上是关于parameterizedType.getActualTypeArguments()[0]是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章