java - 如何在Java中实现扩展另一个通用接口(interface)的通用接口(interface)?

标签 java class generics design-patterns interface

我是 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 , ExtResRes是类型参数。记住这一点很重要,因为它们本身不是类型!

然后我们看一下派生接口(interface)的定义:ItemsProviderInterface<ExtReq, ExtRes>只有 2 个类型参数:ExtReqExtRes 。请注意,尽管名称相同,但它们本质上与基本接口(interface)上的名称没有任何关系。现在,这种联系就出现了:

interface ItemsProviderInterface<ExtReq, ExtRes> 
extends GenericItemProviderInterface<ItemRequest, ExtReq, ExtRes, ItemResponse> 

这意味着ItemsProviderInterface 是一个 GenericProviderInterface 4 个类型参数设置如下:

  • ReqGenericItemProviderInterface设置为实际类型(类或接口(interface))ItemRequest .
  • ExtReqGenericItemProviderInterface设置为类型参数ExtReqItemsProviderItnerface
  • ExtResGenericItemProviderInterface设置为类型参数 ExtResItemsProviderInterface
  • ResGenericItemProviderInterface设置为实际类型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/

相关文章:

class - Kotlin 类初始化语义是什么?

java - 如何在功能接口(interface)/lambda 调用中传递 Object 对象

java - 以编程方式使用动态用户名和密码配置 Hibernate

用于高并发情况的Java有界非阻塞缓冲区

Python:如何在自身内部引用一个类?

java - 引用另一个类作为实例变量?

线程中的 Java 异常 EOFException

java - 如何使其他服务器适配器可见?

generics - Scala,高级泛型扩展

c# - 将 IEnumerable 隐式转换为泛型类型