我正在使自己了解Java泛型(使用JDK 1.4 ...... 1.3在遗留代码上工作了很长时间)并且我不太明白这一点:
public class Foo<T extends Bar<? extends Foo<T>>> { ...
Foo
和Bar
是两个通用类。
如何理解这一点,因为我不太明白?
我已经阅读了很多关于Java泛型的内容,但这有点令人头疼(至少对我来说是初学者)。
答案 0 :(得分:4)
嗯,Foo
必须由T
参数化。 T
本身必须为某些类型Bar<U>
扩展U
,以使U
扩展Foo<T>
。 (在这种情况下,“extend”可以表示“与此类型相同”。)我在这里使用U
作为任意类型名称,但它在声明中未命名,因此?
。< / p>
你是对的,它有点令人费解,但通常在这种事情发生的情况下,它最终使事情变得更简单。如果你能给出一个具体的例子,我们可以更有用地解释一下。