gpt4 book ai didi

java - 让Java从泛型类转换为泛型对象

转载 作者:行者123 更新时间:2023-12-01 10:43:07 25 4
gpt4 key购买 nike

基本上,我有三个功能:

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());
}

最佳答案

getClass()返回扩展 Base 的任何内容,所以没有任何东西向我保证这将与您其他方法中的 T 相同。

为了举例,我们假设 Base 是 Object。现在我们说getClass()将返回 Integer - 它是有效的,因为它扩展了 Object。没有什么可以保证您来自 <T extends Base> getObject() 的 T例如,不是 String - 它也扩展了 Object (记住这是编译时间 - 你不能对 getClass 做出假设,除非它们都使用类声明中定义的相同 T。

如果 T 在方法中定义,则不能假设它在两个方法中是相同的 T

关于java - 让Java从泛型类转换为泛型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com