我真的很难理解通配符参数。我对此有几个问题。
?作为类型参数只能在方法中使用。例如:printAll(MyList<? extends Serializable>)我无法使用?类型参数定义类。我了解
?.printAll(MyList<? extends Serializable>)意思是:“如果它有实现接口的对象,printAll就会打印MyListSerialzable。 ”
我对super.printAll(MyList<? super MyClass>)意思是:“如果它有对象或任何扩展的类(的后代)printAll将打印。MyListMyClassMyClassMyClass”
纠正我哪里出错了。
简而言之,只有Tor Eor Kor or VorN可以用作定义泛型类的类型参数。?只能在方法中使用
更新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表示属于的任何类/接口superT。因此,我们指的是所有的父母T。T因此是下界。继承层次结构中最底层的类