OOP命名法:Curiously Recurring模板模式中完整类型名称的名称是什么?

时间:2017-08-24 20:42:06

标签: java c++ oop

奇怪的重复模板模式是Jim Coplien的通用基类的名称,其实际泛型参数是派生类:

class Base<T> { ... }
class Derived: public Base<Derived> { ... } 

或者在Java中,例如,Comparable和Enums:

class Foo implements Comparable<Foo> { ... }
//or
enum Bar { ... } //  which is actually Bar extends Enum<Bar>

现在,这些类的类型名称依次为DerivedFooBar

但我们称之为还指定派生的东西,即'派生是基础&lt;派生&gt;','Foo实现可比较&lt; Foo&gt;','栏扩展Enum&lt; Bar&gt;'。这不是类型名称,它更多。

但是那个typename-plus-derivation-name的是什么?

2 个答案:

答案 0 :(得分:1)

这是F-有界多态性。 F-bound是约束:

interface I<A extends I<A>>
//            ^----------^

它以子类型显示为

class C extends I<C>

答案 1 :(得分:1)

在Java中,它是在language spec

中给出的
  

给定(可能是通用的)类声明C<F1,...,Fn> (n ≥ 0, C ≠ Object),类类型C<F1,...,Fn>直接超类是extends子句中给出的类型如果存在extends子句则声明C,否则为Object

  

给定(可能是通用的)类声明C<F1,...,Fn> (n ≥ 0, C ≠ Object),类类型C<F1,...,Fn>直接超接口是在implements子句中给出的类型C的声明,如果存在实现条款。

所以,它只是被称为直接超类或直接超级接口。没有特别的名字,因为它“好奇地反复发生”。