了解 的上限和下限?在 Java 泛型中
我真的很难理解通配符参数。我对此有几个问题。
?
作为类型参数,只能在方法中使用。例如:我无法使用 as type 参数定义类。printAll(MyList<? extends Serializable>)
?
我了解 的上限。 意思是:“
printAll
将打印MyList
,如果它具有实现可序列化接口的对象
。
我对 . 意思是:“printAll
将打印MyList
,如果它有MyClass
或任何扩展MyClass
的类(MyClass
的后代)的对象。?
printAll(MyList<? extends Serializable>)
super
printAll(MyList<? super MyClass>)
"
纠正我哪里错了。
简而言之,只有 T
或 E
或 K
或 V
或 N
可以用作定义泛型类的类型参数。?
只能用于方法
更新 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
}
然后,如果
1,将打印。列表
2 中有 的对象。有 对象 或 在printAll()
MyClass
Thread
ActionListener
List
更新 2:
因此,在阅读了该问题的许多答案之后,以下是我的理解:
? extends T
表示扩展T
的任何类。因此,我们指的是T的子项
。因此,T
是上限。继承层次结构中的最上层阶级? super T
表示任何类
/接口是T
的超级。因此,我们指的是T
的所有父级。因此,T
是下限。继承层次结构中最低的类