Java 获取泛型的类型
我需要得到泛型类型的类型。 我已经试过了Java 获取泛型的类型,java,generics,retrofit2,generic-programming,robospice,Java,Generics,Retrofit2,Generic Programming,Robospice,我需要得到泛型类型的类型。 我已经试过了 public abstract class RetrofitRequest<RESULT> extends SpiceRequest<Response<RESULT>> { public RetrofitRequest(){ super(Response<RESULT>.class); //compile time error } @Override pu
public abstract class RetrofitRequest<RESULT> extends SpiceRequest<Response<RESULT>> {
public RetrofitRequest(){
super(Response<RESULT>.class); //compile time error
}
@Override
public final Response<RESULT> loadDataFromNetwork() throws Exception {
WebService webService = RestFulWebService.getRestFulWebService();
return doInBackground(webService);
}
protected abstract Response<RESULT> doInBackground(WebService webService) throws Exception;
}
谢谢
-supunz在请求
类时,您需要镜像您的父控制器
public请求(类clazz){
超级(clazz);
}
令人遗憾的是,现在您必须将其一直带到继承链中,但是如果您想实例化它,您还需要提供类:
RetrofitRequest<String> impl = new RetrofitRequestImpl<String>(String.class);
RefughtRequestImpl=新的RefughtRequestImpl(String.class);
在评论的帮助下解决了我自己的问题
公共抽象类请求扩展了该请求{
受保护的请求(){
超级((类)(类)响应。类);
}
@凌驾
公共最终响应loadDataFromNetwork()引发异常{
WebService WebService=RestFulWebService.getRestFulWebService();
返回doInBackground(webService);
}
@工作线程
受保护的抽象响应doInBackground(WebService WebService)引发异常;
}
刚刚保存了我的一天类型擦除。你不会轻易得到的。为什么这对你没用?你到底想解决什么?因为它在super(Response.class)中生成编译时错误事实上,你没有。如果父类是类型化的,而子类是类型化的,那么在编译时它应该正确解析。也许您应该包括父类(和子类)以更好地解释您的问题。当您使用类实例作为运行时类型标记(“RTTT”)时,通常必须从构造函数的调用方传入它。正如您所发现的,Class
,其中R
是一个类型参数(通常用一个大写字母拼写),将不起作用。您必须从类型的类
文本或编译器可以“查看”类型参数特定解析的实例中提取它。一旦您这样做了,那么您就拥有了运行时泛型的全部功能。(您也可以使用未经检查的强制类型转换来玩游戏,但这通常不是很好。)问题是。类不能用于具有类型的对象,因此没有列表。类
但是列表。类
可以。使用原始类型可能不是一个好主意,但如果使用它们,您可以正常扩展SpiceRequest
,只需调用super即可((Class)Response.Class)
。
public RetrofitRequest(Class<RESULT> clazz){
super(clazz);
}
RetrofitRequest<String> impl = new RetrofitRequestImpl<String>(String.class);
public abstract class RetrofitRequest<RESULT> extends SpiceRequest<Response<RESULT>> {
protected RetrofitRequest(){
super((Class<Response<RESULT>>) (Class<?>) Response.class);
}
@Override
public final Response<RESULT> loadDataFromNetwork() throws Exception {
WebService webService = RestFulWebService.getRestFulWebService();
return doInBackground(webService);
}
@WorkerThread
protected abstract Response<RESULT> doInBackground(WebService webService) throws Exception;
}