有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类如何实现扩展Java中另一个通用接口的通用接口?

我是Java新手,正在致力于实现通用接口,这就是我希望得到一些帮助的地方

我想用Java实现一个通用接口,扩展另一个接口。这就是当前界面结构的样子-

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接口,并为convertInput(), convertResponse(), request()方法提供定义

也许是-

class itemsProvider<> implements ItemsProviderInterface<>

我不确定用哪个泛型类型来定义类。。与ItemsProviderInterface或GenericTemproviderInterface相对应的。我读了很多博客帖子,在StackOverflow上搜索了一个类似的问题,但没有找到。非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    我认为值得检查一下,在这种情况下,哪个标识符意味着什么。让我们先看看基本接口GenericItemProviderInterface<Req, ExtReq, ExtRes, Res>

    这里所有4个类型参数ReqExtReqExtResRes都是类型参数。记住这一点很重要,因为他们自己不是那种类型的人

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

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

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

    • ReqGenericItemProviderInterface被设置为实际类型(类或接口)ItemRequest
    • ^GenericItemProviderInterface的{}被设置为ItemsProviderItnerface的类型参数ExtReq
    • ExtRes{}的{}被设置为{}的类型参数ExtRes
    • ResGenericItemProviderInterface被设置为实际类型ItemResponse

    因此,基类的4个类型参数中有2个“固定”为特定类型,其余两个为左变量

    如果现在实现ItemProviderInterface,您可以也有两个类型参数,并将它们路由到ExtReq/ExtRes将它们固定到特定的类(或执行1-and-1,但这对于这个特定的示例可能没有用处)

    所以或者

    class MyItemProvider<ExtReq, ExtRes>
        implements ItemProviderInterface<ExtReq, ExtRes> {...}
    

    class MySpecificItemProvider
        implements ItemProviderInterface<MySpecificExtReq, MySpecificExtRes> {...}