我是 Java 新手,致力于实现通用接口(interface),这就是我需要帮助的地方。
我想在 Java 中实现一个扩展另一个接口(interface)的通用接口(interface)。这就是当前界面结构的样子 -
interface ItemsProviderInterface<ExtReq, ExtRes>
extends GenericItemProviderInterface<ItemRequest, ExtReq, ExtRes, ItemResponse> {}
interface GenericItemProviderInterface<Req, ExtReq, ExtRes, Res>{
ExtReq convertInput(Req req)
Res convertResponse(ExtRes res)
ExtRes request(ExtReq req)
}
我想实现 ItemsProviderInterface
接口(interface)并提供 convertInput()、convertResponse()、request()
方法的定义。
也许类似 -
class itemsProvider<> implements ItemsProviderInterface<>
我不确定用哪种泛型类型来定义类..对应于 ItemsProviderInterface 或 GenericItemProviderInterface 的泛型类型。我读了很多博客文章,并在 StackOverflow 上搜索了类似的问题,但没有找到。非常感谢任何帮助。
最佳答案
我认为值得检查在这种情况下哪个标识符意味着什么。我们先看一下基础接口(interface)GenericItemProviderInterface<Req, ExtReq, ExtRes, Res>
.
这里是所有 4 个类型参数 Req
, ExtReq
, ExtRes
和Res
是类型参数。记住这一点很重要,因为它们本身不是类型!
然后我们看一下派生接口(interface)的定义:ItemsProviderInterface<ExtReq, ExtRes>
只有 2 个类型参数:ExtReq
和ExtRes
。请注意,尽管名称相同,但它们本质上与基本接口(interface)上的名称没有任何关系。现在,这种联系就出现了:
interface ItemsProviderInterface<ExtReq, ExtRes>
extends GenericItemProviderInterface<ItemRequest, ExtReq, ExtRes, ItemResponse>
这意味着ItemsProviderInterface
是一个 GenericProviderInterface
4 个类型参数设置如下:
-
Req
的GenericItemProviderInterface
设置为实际类型(类或接口(interface))ItemRequest
. -
ExtReq
的GenericItemProviderInterface
设置为类型参数ExtReq
的ItemsProviderItnerface
-
ExtRes
的GenericItemProviderInterface
设置为类型参数ExtRes
的ItemsProviderInterface
-
Res
的GenericItemProviderInterface
设置为实际类型ItemResponse
.
因此,基类的 4 个类型参数中的 2 个被“固定”为特定类型,其余两个是左变量。
如果您现在实现ItemProviderInterface
您也可以有 2 个类型参数并将它们路由到 ExtReq
/ExtRes
或者将它们修复到特定的类(或者执行 1-and-1,但这对于这个特定的示例可能没有用。
所以要么
class MyItemProvider<ExtReq, ExtRes>
implements ItemProviderInterface<ExtReq, ExtRes> {...}
或
class MySpecificItemProvider
implements ItemProviderInterface<MySpecificExtReq, MySpecificExtRes> {...}
关于java - 如何在Java中实现扩展另一个通用接口(interface)的通用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68655153/