List<? extends Number>和List<? super Number>是Java泛型中的通配符类型,它们有一些区别。
List<? extends Number>表示一个元素类型为某种Number类型的列表,但是具体是哪种Number类型是不确定的。这意味着我们可以将该列表视为一个只读的列表,我们可以从中读取元素,但无法向其中添加元素,因为我们无法确定要添加的元素的具体类型是否符合限制。例如,我们无法向该列表中添加一个Integer类型的元素,因为该列表可能实际上是一个Double类型的列表。
List<? super Number>表示一个元素类型为某种Number类型或Number的超类的列表。这意味着我们可以将该列表视为一个只写的列表,我们可以向其中添加元素,但无法从中读取元素,因为我们无法确定从列表中读取的元素的具体类型。例如,我们可以向该列表中添加一个Integer类型的元素,因为Integer是Number的子类,但我们无法从该列表中读取元素并确保它是Integer类型。
因此,List<? extends Number>类型的列表适用于只读操作,例如从中读取元素并进行处理,而List<? super Number>类型的列表适用于只写操作,例如向其中添加元素。在使用时,我们应该根据具体的需求和使用场景来选择使用哪种通配符类型。
网友评论