传递泛型类型的问题

高拉夫·阿罗拉(Gaurav Arora)

我正在尝试做这样的事情:

public class ResponseProcessorFactory {

    public static <T> ResponseProcessor<T> newResponseProcessor(){
        return new GsonResponseProcessor<T>();
    }    
}

public class GsonResponseProcessor<T> implements ResponseProcessor<T> {

    protected T response;
    protected TypeToken typeToken;

    public GsonResponseProcessor() {
        this.typeToken = new TypeToken<T>(){};
    }

    @Override
    public void parse(String jsonString) throws JSONException, IOException {
            response = GsonHelper.getGsonInstance().fromJson(jsonString, typeToken.getType());
    }

    public T getResponse() {
        return response;
    }
}


private void ResponseProcessor getResponseProcessor(){
       return ResponseProcessorFactory<List<String>>.newResponseProcessor();
}

现在,无论何时调用getResponseProcessor(),它都不会返回给我的响应处理器List<String>而是返回的默认响应处理器Object

我敢肯定,我缺少一些有关泛型的概念。有人可以详细解释吗?

编辑:实际用法是这样的:

   public BaseRequestWithResponseProcessor<List<Dashboard>> getDashboards(Listener<List<Dashboard>> responseListener, ErrorListener errorListener) {
        String url = mBaseUrl + "/dashboard";

        ResponseProcessor<List<Dashboard>> responseProcessor = ResponseProcessorFactory.newResponseProcessor();

        AuthInfo authInfo = getAuthInfo();
        BaseRequestWithResponseProcessor<List<Dashboard>> request = new BaseRequestWithResponseProcessor<List<Dashboard>>(
                Method.GET, url, authInfo, null, responseProcessor, responseListener, errorListener);
        return request;
    }
i

GsonResponseProcessor构造函数中发生类型擦除,并且在运行时仅存在方法的一种版本,并将类型变量T转换为Object

在Java中,将仅存在一种通用方法和类的版本,类型参数仅在编译时存在,并Object在运行时被替换

类型令牌必须使用具体的类型来构造,以捕获类型信息。这就是他们的重点,目的是在已知具体类型的地方捕获类型信息。然后可以将令牌存储在变量中,以后再用于查找对象或通过反射获取类型信息。

此处的解决方案是,getResponseProcessor知道具体类型的调用者将创建类型令牌并将其作为参数传递。Class如果在您的情况下可行,您也可以传递一个对象。但是,如果您想将通用类用作标记,则在您的示例中,List<Dashboard>您将需要一个类型标记。

像这样的东西:

ResponseProcessor<List<String>> p = ResponseProcessorFactory.newResponseProcessor(new TypeToken<List<String>>() {});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递泛型类型的问题

来自分类Dev

Java的泛型类型问题

来自分类Dev

将泛型类型传递给方法

来自分类Dev

未明确传递泛型类型的值?

来自分类Dev

未明确传递泛型类型的值?

来自分类Dev

将泛型类型传递给方法

来自分类Dev

类型列表的AssertJ条件的泛型问题

来自分类Dev

覆盖方法的问题(使用泛型类型)

来自分类Dev

泛型类型范围问题

来自分类Dev

泛型、继承和类型擦除问题

来自分类Dev

将属性的类型传递给泛型类型

来自分类Dev

使用受约束的泛型类型不受限制地传递的泛型类型

来自分类Dev

动态将对象类型传递给泛型方法

来自分类Dev

如何传递对象类型以调用泛型方法

来自分类Dev

无法将匿名类型传递给泛型构造函数

来自分类Dev

统一的参数传递和类型安全与Java泛型

来自分类Dev

如何通过传递的保护函数来缩小泛型类型?

来自分类Dev

如何将类型(泛型)传递给注释?

来自分类Dev

将变量类型作为泛型传递给递归工厂

来自分类Dev

将变量ViewModel类型作为泛型传递给方法

来自分类Dev

将泛型类型类传递给方法

来自分类Dev

C#将类类型的字典传递给泛型

来自分类Dev

将(本地)变量作为类型传递给泛型方法

来自分类Dev

将实体框架类型传递给泛型方法

来自分类Dev

如何通过传递泛型类型创建多种用途的函数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

避免传递扩展泛型类的类的泛型类型参数

来自分类Dev

DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

来自分类Dev

为泛型方法传递具体类型参数时,返回泛型IEnumerable

Related 相关文章

热门标签

归档