我真的很难理解通配符参数。我对此有几个问题。
?
作为类型参数只能在方法中使用。例如:printAll(MyList<? extends Serializable>)
我无法使用?
类型参数定义类。我了解
?
.printAll(MyList<? extends Serializable>)
意思是:“如果它有实现接口的对象,printAll
就会打印MyList
Serialzable
。 ”
我对super
.printAll(MyList<? super MyClass>)
意思是:“如果它有对象或任何扩展的类(的后代)printAll
将打印。MyList
MyClass
MyClass
MyClass
”
纠正我哪里出错了。
简而言之,只有T
or E
or K
or or V
orN
可以用作定义泛型类的类型参数。?
只能在方法中使用
更新1:
public void printAll(MyList<? super MyClass>){
// code code code
}
根据 Ivor Horton 的书,MyList<? super MyClass>
意味着我可以打印MyList
它是否具有它实现的对象MyClass
或任何接口或类。也就是说,MyClass
是一个下界。它是继承层次结构中的最后一个类。这意味着我最初的假设是错误的。
所以,说如果MyClass
看起来像:
public class MyClass extends Thread implements ActionListener{
// whatever
}
然后,printAll()
将打印如果
1.MyClass
列表中
有 的对象 2. 有Thread
或ActionListener
的对象List
更新 2:
因此,在阅读了该问题的许多答案之后,这是我的理解:
? extends T
表示任何扩展的类T
。因此,我们指的是 的孩子T
。因此,T
是上限。继承层次结构中最上层的类? super T
表示属于的任何类/接口super
T
。因此,我们指的是所有的父母T
。T
因此是下界。继承层次结构中最底层的类