【发布时间】:2015-12-17 21:49:21
【问题描述】:
基本上,我有三个功能:
Class<? extends Base> getClass();
T ObjectFromClass(Class<T> classOfT);
<T extends Base> getObject(){
return ObjectFromClass(getClass());
}
这段代码给了我以下编译器错误:
类型不匹配:无法从 capture#1-of 转换?将 Base 扩展到 T。
现在可以通过将返回值转换为 (T) 来解决此问题。但是,据我所知,由于 Class 本身必须扩展 Base,因此生成的对象也必须扩展 Base,因此这个返回是类型安全的。
我错了吗?
如果我不是,有没有办法让我在这个过程中的任何时候都不必施放?
编辑:我被要求提供更多背景信息:
我正在使用 gson 与 json 进行转换以调用 web 服务。这个想法是我有一堆请求和响应对象用于我必须进行的各种调用。我有一个通用的 getResponse(Request) 函数,我希望它能够根据请求自动返回正确的响应类型。我给每个请求一个 getResponseType() 函数,它也返回它对应的响应的类。所以我打电话给
T<extends Response> getResponse(Request request){
///do work to get webResponse
return gson.fromJson(webResponse, request.getResponseType());
}
【问题讨论】:
-
您能否提供更多背景信息,例如您将在何处/如何使用它的示例?
-
我添加了对主要问题的回复,因为您似乎无法在回复中进行太多格式化。
-
你的代码语法不正确
标签: java class generics casting