java - 这个 Java 泛型范例是做什么的,它叫什么?

标签 java generics inheritance

我正在查看一些具有以下形式的 Java 类:


public 
abstract
class A <E extends A<E>> implements Comparable <E> {

   public final int compareTo( E other ) {
      //  etc
   }   
}

public 
class B extends A <B> {
   // etc
}

public 
class C extends A <C> {
   // etc
}


我在这里使用“Comparable”只是为了说明通用参数“E”的可能用法。这种泛型/继承的用法有名字吗?它有什么用?

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

无论如何,只是想知道是否有专家以前见过这个并知道它的作用。

谢谢!

最佳答案

在 C++ 中,它被称为 Curiously Recurring Template Pattern (CRTP)。我不知道它在 Java 中是否有不同的名称(或者即使它有名称),但它可能用于类似的目的。

关于java - 这个 Java 泛型范例是做什么的,它叫什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382915/

相关文章:

c# - C# 泛型类型中的 "Current Type"占位符?

java - 使用泛型在类上实现 equals 时避免警告

generics - Groovy 中的泛型方法

C++,通过指针传递泛型数组,继承,错误: no operator which takes a right-hand operand

c++ - 具有继承的嵌套类的名称查找

c++ - 类模板继承 C++

java - 将 JLabel/JPanel 添加到 Scala Swing Panel 时出现类型不匹配错误

networking - 调用 java -jar 时禁用互联网访问

java - Android:扩展 ActionBarActivity 会使应用程序崩溃

Mac OS Lion 上使用 PowerPC JavaApplicationStub 的 Java 应用程序