我正在深入研究泛型,当我觉得我知道,我得到证明,否则由编译器:-)
来源:
public class Generics3 {
<T> void printExtends_compile_error( List<T extends Dog> t) {
}
void printExtends_correct_syntax( List<? extends Dog> t) {
}
<T> void printSuper_compile_error(List<T super Dog> t) {
}
void printSuper_correct_syntax(List<? super Dog> t) {
}
class FatherOfAllAnimal{}
class Animal extends FatherOfAllAnimal{}
class Dog extends Animal {}
class Cat extends Animal {}
class Tiger extends Animal {}
class Lion extends Animal {}
class Dog1 extends Dog{}
class Dog2 extends Dog1{}
class Dog3 extends Dog2{}
以**_compile_error结尾的方法是编译错误-为什么它们无效?那么,我可以使用super或extends”只带通配符吗?
有人能帮忙清理一下吗?
1条答案
按热度按时间nkoocmlb1#
printExtends_compile_error
和printSuper_compile_error
无效是因为您试图在方法的参数声明中使用有界类型参数,这在Java中是不允许的。在Java中,当声明一个有界类型参数时,它必须在类或方法级别完成,而不是在方法的参数级别。
所以你要做的是
但是
super
不能用作类型参数,而只能用作通配符。仍然是无效的。