我可能会让这里的一些人失明,但无论如何我还是会开枪的。
我知道我能做到:
Class<Response> c = Response.class;获取对象的类。假设响应对象是Response<T>,我想执行如下操作
Class<Class<User>> c = Response<User>.class;我的全部问题是:
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;
}
}但是上面的参数还没有在赋值中指定。从理论上讲,正确的方式需要:
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错误。
或者,我可以在构造函数中传递类:
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 );发布于 2014-09-26 21:02:16
正如评论所表明的,没有像这样的事情
Class<GenericType<GenericArgument>>或者说,它不会像你想的那样做。每个类型声明(类、接口、枚举、原语)都得到一个Class实例,不管它是否是泛型的。
因此,即使您有一个Class<GenericType<ArgumentOne>>类型的引用和另一个Class<GenericType<ArgumentTwo>>类型的引用,它们所引用的实例也将完全相同。更重要的是,绝对没有办法查询类型参数类型。
你似乎在使用杰克逊的ObjectMapper。它提供了一种以类型标记的形式获取泛型类型信息的黑客。可以使用TypeReference或JavaType实例来表示泛型类型。例如here和互联网上的其他地方。
https://stackoverflow.com/questions/26066867
复制相似问题