Generics 我什么时候需要实现不同类型的通用接口? 出身背景

Generics 我什么时候需要实现不同类型的通用接口? 出身背景,generics,generic-programming,Generics,Generic Programming,Java/C中著名的接口之一是可比较的接口。当人们想要实现它时,通常的情况是将type参数设置为实现者的类型。比如说, class Person implements Comparable<Person> { /*body*/ } class Person实现了可比较的{/*body*/} 此类接口对于通用函数非常有用,例如排序: <T extends Comparable<T>> T[] sort(T[] xs) { /*body*/ } T[]排序(

Java/C中著名的接口之一是可比较的接口。当人们想要实现它时,通常的情况是将type参数设置为实现者的类型。比如说,

class Person implements Comparable<Person> { /*body*/ }
class Person实现了可比较的{/*body*/}
此类接口对于通用函数非常有用,例如排序:

<T extends Comparable<T>> T[] sort(T[] xs) { /*body*/ }
T[]排序(T[]xs){/*body*/}
问题 由于我们似乎几乎使用相同的类型来实现接口(如背景中所示),我们何时将类型参数设置为与实现者不同的类型

例如:

class A implements AnInterface<B> { /*body*/ }
类实现了一个接口{/*body*/}
因此,我正在寻找以下问题的答案:

  • 这种场景的用例是什么
  • 这些用例的替代方案是什么

  • 当您的类是更通用接口的某些特定情况的实现时,这种情况偶尔会发生

    例如,在持久数据结构中,整数映射比一般映射(即平衡二叉树)具有更高效的表示。在这种情况下,您可能需要以下内容:

    class EfficientIntMap implements Map<Integer>
    
    类efficientmap实现Map
    

    我不知道你所说的“替代品”是什么意思。当然,您不必继承此类接口,也不必使用OOP。

    谢谢您的回答,但如果您也能回答问题2,将更能说服观众。@WongJiaHau我不确定您所说的“替代品”是什么意思。这对我来说似乎非常广泛。例如,您的用例是
    更有效地表示整数映射
    ,因此除了使用您提到的方法外,如果不使用您的方法,我如何实现它?如果你能提供一个比你的方法更糟糕的替代方案,那么你可以说服我们,使用不同类型实现接口实际上是有用的。@WongJiaHau当然,你可以使用效率较低的表示法,也可以不使用
    实现
    ,这两种方法显然都会更糟糕。