这个Javagenerics范例做了什么以及它叫做什么?

我正在看一些具有以下forms的Java类:

public abstract class A <E extends A> implements Comparable  { public final int compareTo( E other ) { // etc } } public class B extends A  { // etc } public class C extends A  { // etc } 

我在这里使用“可比较”只是为了说明通用参数“E”的可能用途。 generics/inheritance的这种用法是否有名称? 它是干什么用的?

我的印象是,这允许抽象类提供方法的通用实现(例如compareTo),而不必在子类中提供它。 但是,在此示例中,与inheritance方法不同,它会限制子类在同一子类的其他实例上调用compareTo,而不是任何“A”子类。 这听起来不错吗?

无论如何,只是好奇,如果有任何大师之前已经看过这个,并知道它做了什么。

谢谢!

在C ++中,它被称为奇怪的重复模板模式 (CRTP)。 我不知道它在Java中是否有不同的名称(或者即使它有一个名称),但它可能用于类似的目的。

我相信它通常被称为递归通用类型。 正如Tom Hawtin指出的那样,你可能希望A >。 这种模式最突出的用途是java.lang.Enum(你可能知道你选择Comparable 作为你的界面)。

它没有名称,通常没用。 编写它的人可能没有意识到他们可以这样写它:

 class A implements Comparable 

我的印象是,这允许抽象类提供方法的通用实现(例如compareTo),而不必在子类中提供它。

不超过class A

但是,在此示例中,与inheritance方法不同,它会限制子类在同一子类的其他实例上调用compareTo,而不是任何“A”子类。 这听起来不错吗?

不,那是不对的。 它限制它在E上调用compareTo ,无论E是什么。