泛型类型参数取决于它自己

时间:2017-01-24 11:49:04

标签: java generics

我遇到了以下内容:

我理解这一点:

在类的类型参数部分中,如果S是T的边界,则类型变量T直接依赖于类型变量S,而如果T直接依赖于S或T直接取决于S,则T依赖于S.类型变量U依赖于S(递归使用此定义)

但是

如果类的类型参数部分中的类型变量依赖于自身,则是编译时错误。

这是什么意思? Reference

2 个答案:

答案 0 :(得分:6)

该陈述的含义是类型参数变量不能依赖于它自身。不允许使用以下代码:

class Generic<T extends T> {

}

这里T是一个类型参数变量,它不能依赖于它自己(直接或不完整)。另一方面,允许使用以下代码:

public class GenericRecursive<T extends GenericRecursive<T>> {

}

答案 1 :(得分:2)

  

如果类类型中的类型变量,则是编译时错误   参数部分取决于它自己。

参数不能从自身派生。

例如,它不合法:

class YourClass<S extends S> { 
}

但你可能不会使用它,因为它没有任何意义。

你可以这样做:

class YourClass<T extends S, S extends T> { 
}

它也不会编译,因为T取决于依赖于它自己的S(周期)