Java泛型 - 我如何阅读:Foo <t extends =“”bar <?=“”extends =“”foo <t =“”>&gt;&gt;?</t>

时间:2011-05-06 16:57:15

标签: java generics crtp

我正在使自己了解Java泛型(使用JDK 1.4 ...... 1.3在遗留代码上工作了很长时间)并且我不太明白这一点:

public class Foo<T extends Bar<? extends Foo<T>>> { ...

FooBar是两个通用类。

如何理解这一点,因为我不太明白?

我已经阅读了很多关于Java泛型的内容,但这有点令人头疼(至少对我来说是初学者)。

1 个答案:

答案 0 :(得分:4)

嗯,Foo必须由T参数化。 T本身必须为某些类型Bar<U>扩展U,以使U扩展Foo<T>。 (在这种情况下,“extend”可以表示“与此类型相同”。)我在这里使用U作为任意类型名称,但它在声明中未命名,因此?。< / p>

你是对的,它有点令人费解,但通常在这种事情发生的情况下,它最终使事情变得更简单。如果你能给出一个具体的例子,我们可以更有用地解释一下。