首页
学习
活动
专区
圈层
工具
发布

泛型类
EN

Stack Overflow用户
提问于 2014-09-26 19:22:31
回答 1查看 5.5K关注 0票数 10

我可能会让这里的一些人失明,但无论如何我还是会开枪的。

我知道我能做到:

代码语言:javascript
复制
Class<Response> c = Response.class;

获取对象的类。假设响应对象是Response<T>,我想执行如下操作

代码语言:javascript
复制
Class<Class<User>> c =  Response<User>.class;

我的全部问题是:

代码语言:javascript
复制
public class RequestHelper<T> extends AsyncTask<String, Response, T> {

    @Override
    protected T doInBackground(String... strings) {
       ...
       Response <T> r = objectMapper.readValue( result, Response.class );
       return r .getResponse();
    }
}

//and

public class Response <R> {
    private R response;
    public R getResponse() {
        return response;
    }
}

但是上面的参数还没有在赋值中指定。从理论上讲,正确的方式需要:

代码语言:javascript
复制
public class RequestHelper<T> extends AsyncTask<String, Response, T> {

    @Override
    protected T doInBackground(String... strings) {
       ...
       Response <T> r = objectMapper.readValue( result, Response <T>.class );
       return r.getResponse();
    }
}

但这会产生“无法从参数化类型中选择”的lint错误。

或者,我可以在构造函数中传递类:

代码语言:javascript
复制
public class RequestHelper<T> extends AsyncTask<String, Response, T> {

    ....
    public RequestHelper(Class<Class<T>> tClass){
         this.tClass = tclass;
    }

    @Override
    protected T doInBackground(String... strings) {
       ...
       Response <T> r = objectMapper.readValue( result, tclass );
       return r.getResponse();
    }
}

// where the init of the class would have been:

 new RequestHelper<User>( Response<User>.class );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 21:02:16

正如评论所表明的,没有像这样的事情

代码语言:javascript
复制
Class<GenericType<GenericArgument>>

或者说,它不会像你想的那样做。每个类型声明(类、接口、枚举、原语)都得到一个Class实例,不管它是否是泛型的。

因此,即使您有一个Class<GenericType<ArgumentOne>>类型的引用和另一个Class<GenericType<ArgumentTwo>>类型的引用,它们所引用的实例也将完全相同。更重要的是,绝对没有办法查询类型参数类型。

你似乎在使用杰克逊的ObjectMapper。它提供了一种以类型标记的形式获取泛型类型信息的黑客。可以使用TypeReferenceJavaType实例来表示泛型类型。例如here和互联网上的其他地方。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26066867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档