我遇到了以下使用泛型和继承的Java代码.我真的不明白以下代码片段的作用:
class A<B extends A<B>> {
...
}
Run Code Online (Sandbox Code Playgroud)
这段代码有什么作用?
(我从MapDB中的DBMaker那里得到了这个)
几乎很明显,这个问题实际上分为两个部分:
1)为什么B extends A
?
2)为什么A
里面B extends A<B>
有泛型B
?
这些部分的答案将是:
1)在特定的示例中,此类(A
)是构建器类(称为DBMaker
),因此其大多数方法返回某种类型,从而扩展了该构建器的类类型。这就说明了,为什么B
要扩展A
课堂。
2)但是,实际上,如果我们将第二部分隐藏起来...extends A<B>
,我们将得到just class A<B>
。因此A
具有type的type变量B
。这就是为什么在...extends A<B>
A中将A
其标记为具有type variable的类型B
。