这个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
它没有名称,通常没用。 编写它的人可能没有意识到他们可以这样写它:
class A implements Comparable
我的印象是,这允许抽象类提供方法的通用实现(例如compareTo),而不必在子类中提供它。
不超过class A
但是,在此示例中,与inheritance方法不同,它会限制子类在同一子类的其他实例上调用compareTo,而不是任何“A”子类。 这听起来不错吗?
不,那是不对的。 它限制它在E
上调用compareTo
,无论E
是什么。